- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
投票协议之构建和解析协议消息.
投票协议之构建和解析协议消息来源:华岳刷票 我们来看一个简单的例子,对在实现别人定义的协议时可能用到的技术进行了介绍。这个例子程序是一个简单的投票协议,如图3.2所示。这里,一个客户端向服务器发送了一个请求消息,消息中包含了一个候选人ID,范围是0至1000。Vote Reques:投票请求, Candidate:候选人,Vote Count:选票总数程序支持两种请求。一种是查询(inquiry),即向服务器询问给定候选人当前获得的投票总数。服务器发回一个响应消息,包含了原来的候选人ID和该候选人当前(查询请求收到时)获得的选票总数。另一种是投票(voting)请求,即向指定候选人投一票。服务器对这种请求也发回响应消息,包含了候选人ID和其获得的选票数(包括了刚投的一票)。在实现一个协议时,定义一个专门的类来存放消息中所包含的信息是大有裨益的。该类提供了操作消息中的字段的方法--同时用来维护不同字段之间的不变量。在我们的例子中,客户端和服务器端发送的消息都非常简单,它们唯一的区别是服务器端发送的消息包含了选票总数和一个表示响应消息(不是请求消息)的标志。因此,我们可以用一个类来表示客户端和服务器端的两种消息。VoteMsg.java类展示了每条消息中的基本信息:布尔值isInquiry,其值为true时表示该消息是查询请求(为false时表示该消息是投票信息);布尔值isResponse,指示该消息是响应(由服务器发送)还是请求;整型变量candidateID指示了候选人的ID;长整型变量voteCount指示出所查询的候选人获得的总选票数。这个类还维护了以下字段间的不变量:candidateID的范围是0到1000。voteCount在响应消息中只能是一个非零值(isResponse为true)。voteCount不能为负数。VoteMsg.java0 public class VoteMsg {1 private boolean isInquiry; // true if inquiry; false ifvote2 private boolean isResponse;// true if response fromserver3 private int candidateID; // in [0,1000]4 private long voteCount; // nonzero only in response56 public static final int MAX_CANDIDATE_ID = 1000;78 public VoteMsg(boolean isResponse, boolean isInquiry,int candidateID, long voteCount)9 throws IllegalArgumentException {10 // check invariants11 if (voteCount != 0 !isResponse) {12 throw new IllegalArgumentException(Request vote countmust be zero);13 }14 if (candidateID 0 || candidateID MAX_CANDIDATE_ID){15 throw new IllegalArgumentException(Bad Candidate ID: + candidateID);16 }17 if (voteCount 0) {18 throw new IllegalArgumentException(Total must be =zero);19 }20 this.candidateID = candidateID;21 this.isResponse = isResponse;22 this.isInquiry = isInquiry;23 this.voteCount = voteCount;24 }2526 public void setInquiry(boolean isInquiry) {27 this.isInquiry = isInquiry;28 }2930 public void setResponse(boolean isResponse) {31 this.isResponse = isResponse;32 }3334 public boolean isInquiry() {35 return isInquiry;36 }3738 public boolean isResponse() {39 return isResponse;40 }4142 public void setCandidateID(int
您可能关注的文档
- 扣件脚手架施工规范..doc
- 扬州大学国际金融(B卷)..doc
- 扬州大学商学院宏观经济学大纲..doc
- 扬州大学测控技术与仪器专业培养方案2010版2009年12月上交..doc
- 扬州大学校园一卡通使用手册..doc
- 扬州市对外贸易状况及问题分析..doc
- 扬州市六圩污水处理厂试运行总结(A2O工艺)..doc
- 扬州市社区社会管理创新工作调研报告(送审稿)2..doc
- 扬子江快运航空公司iCargo操作手册_AMS分册(F4Cn)..doc
- 扬州六圩污水处理厂实习报告..doc
- 2024年USB电话商务管理系统项目可行性研究报告.docx
- [白城]2024年吉林白城市通榆县事业单位面向下半年应征入伍高校毕业生招聘笔试历年参考题库(频考点试.docx
- [甘肃]2024年甘肃省地质矿产勘查开发局第一地质矿产勘查院招聘52人笔试历年参考题库(频考点试卷).docx
- 2024年端子机刀片刀模项目可行性研究报告.docx
- 2024年情侣相框项目可行性研究报告.docx
- [玉溪]2024下半年云南玉溪市事业单位招聘工作人员189人笔试历年参考题库(频考点试卷)解题思路附.docx
- 2024至2030年双面脚轮项目投资价值分析报告.docx
- [湖南]2024年湖南劳动人事职业学院招聘32人笔试历年参考题库(频考点试卷)解题思路附带答案详解.docx
- [湖南]2024年湖南建筑高级技工学校(湖南建设中等职业学校)招聘17人笔试历年参考题库(频考点试卷.docx
- [烟台]2024年山东烟台市市场监督管理局所属事业单位招聘19人笔试历年参考题库(频考点试卷)解题思.docx
文档评论(0)