【Java TCP/IP Socket】构建和解析自定义协议消息(含代码)

本文介绍了如何使用Java构建和解析自定义的协议消息,以投票协议为例,展示了如何定义消息类 VoteMsg 和实现编码解码接口 VoteMsgCoder。内容包括消息结构、编码规范以及基于文本和二进制的编码实现。
摘要由CSDN通过智能技术生成

转载请注明出处:http://blog.csdn.net/ns_code/article/details/14229253


     在传输消息时,用Java内置的方法和工具确实很用,如:对象序列化,RMI远程调用等。但有时候,针对要传输的特定类型的数据,实现自己的方法可能更简单、容易或有效。下面给出一个实现了自定义构建和解析协议消息的Demo(书上例子)。


     该例子是一个简单的投票协议。这里,一个客户端向服务器发送一个请求消息,消息中包含了一个候选人的ID,范围在0~1000。程序支持两种请求:一种是查询请求,即向服务器询问候选人当前获得的投票总数,服务器发回一个响应消息,包含了原来的候选人ID和该候选人当前获得的选票总数;另一种是投票请求,即向指定候选人投一票,服务器对这种请求也发回响应消息,包含了候选人ID和获得的选票数(包含了刚刚投的一票)。

     在实现一个协议时,一般会定义一个专门的类来存放消息中所包含的的信息。在我们的例子中,客户端和服务端发送的消息都很简单,唯一的区别是服务端发送的消息还包含了选票总数和一个表示相应消息的标志。因此,可以用一个类来表示客户端和服务端的两种消息。下面的VoteMsg.java类展示了每条消息中的基本信息:

  •      布尔值isInquiry,true表示该消息是查询请求,false表示该消息是投票请求;
  •      布尔值isResponse,true表示该消息是服务器发送的相应消息,false表示该消息为客户端发送的请求消息;
  •      整型变量candidateID,指示了候选人的ID;
  •      长整型变量voteCount,指示出所查询的候选人获得的总选票数。

     另外,注意一下几点:

  •       candidateID的范围在0~1000;
  •       voteCount在请求消息中必须为0;
  •       voteCount不能为负数

  • 16
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值