请教大神,java socket接口,TCP长连接,怎么解析和发送一种协议格式数据包
1个回答
展开全部
建议你下载我的java版本至尊聊天程序源码下去参考。在CSDN或百度上找吧。
协议完全自己来定制,数据以字节发送,以什么开始,什么结束,中间分几段,都可由你自己来定,接收时,就按你定的规则来解析并还原。比如:我要的协议格式为
:>10:3:5:content:<
:>表示一条消息的开始。
10表示总消息长度(只是个代数,有可能不是10,需要你在发送前计算)
:为分隔符
3为头消息长度,也可能不是3
5表示后面的消息内容长度,甚至还可以定制,是否有图片,从多少位置开始是图片的数据。
:<表示结束标志
没有人限制你的协议。
关键一点:你在收取的时候,一定要注意数据可能会粘包,这个问题很头疼的。因为一般都是多线程模式。这需要你自己来处理它。一言难清。可以参考我的聊天程序。
协议完全自己来定制,数据以字节发送,以什么开始,什么结束,中间分几段,都可由你自己来定,接收时,就按你定的规则来解析并还原。比如:我要的协议格式为
:>10:3:5:content:<
:>表示一条消息的开始。
10表示总消息长度(只是个代数,有可能不是10,需要你在发送前计算)
:为分隔符
3为头消息长度,也可能不是3
5表示后面的消息内容长度,甚至还可以定制,是否有图片,从多少位置开始是图片的数据。
:<表示结束标志
没有人限制你的协议。
关键一点:你在收取的时候,一定要注意数据可能会粘包,这个问题很头疼的。因为一般都是多线程模式。这需要你自己来处理它。一言难清。可以参考我的聊天程序。
追答
你用字节数组来接收,先收完包头数据,注意,一定要收完包头数据。
然后将包头按它组装的结构来解析。就得到你要的数据了。
他第一个字节是个char,你就还原成char
最后是个msgtype,short,你也还原成short(2个字节)
剩下的内容是个int4字节。
关键一点,你每收一次,就要检查所收到的字节数组总数是否和发送的总数相配。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询