java socket报文拼接问题

chenjsh_ 2018-05-09 10:48:19
请教一下,我有个需求:
报文前四位整形(网络字节反序)表示报文内容长度,不包含本身四位长度。
这个要如何加工报文前4位?可以给出方案或者直接给我asc 16进制的看看。

我的报文包体内容是:
01 0 |ms|name|address|2|22150796201401|201401|0.00|0.00|0.00|0.00|0.00|21|22150796201402|201402|400.00|1.00|0.00|0.00|0.00|14

16进制asc码是:
[30 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20 7c 6d 73 7c 6e 61 6d 65 7c 61 64 64 72 65 73 73 7c 32 7c 32 32 31 35 30 37 39 36 32 30 31 34 30 31 7c 32 30 31 34 30 31 7c 30 2e 30 30 7c 30 2e 30 30 7c 30 2e 30 30 7c 30 2e 30 30 7c 30 2e 30 30 7c 32 31 7c 32 32 31 35 30 37 39 36 32 30 31 34 30 32 7c 32 30 31 34 30 32 7c 34 30 30 2e 30 30 7c 31 2e 30 30 7c 30 2e 30 30 7c 30 2e 30 30 7c 30 2e 30 30 7c 31 34]
...全文
1398 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dan淡淡的心 2018-05-31
  • 打赏
  • 举报
回复
http://www.cnblogs.com/mouseIT/p/4189386.html 思路就是这样个样子 具体情况结合一下就好
clj23 2018-05-23
  • 打赏
  • 举报
回复
String str ="01 0 |ms|name|address|2|22150796201401|201401|0.00|0.00|0.00|0.00|0.00|21|22150796201402|201402|400.00|1.00|0.00|0.00|0.00|14 "; byte[] bb= str.getByte(); int value= bb.length; //int 转byte[]数组 byte[] src = new byte[4]; src[3] = (byte) ((value>>24) & 0xFF); src[2] = (byte) ((value>>16) & 0xFF); src[1] = (byte) ((value>>8) & 0xFF); src[0] = (byte) (value & 0xFF); return src; } java 的写法,大概就是这样
kampoo 2018-05-15
  • 打赏
  • 举报
回复
TCP因为没有边界,是流,所以一般加头尾;UDP通常是一个报文整体解析。 理论上,即使TCP没有边界,只要每个包头是4字节的长度,后面是包数据,只要解析不出错也是没问题的。但为了预防解析出错,比如程序多消费或者少消费了几个字节,因为没有特征字节,所以造成后面的数据作为包长度来处理了,造成不可知的后果。通常的包结构是: 包头(比如固定的2个字节); 指令字(比如固定的2个字节); 数据长度(比如固定的2个字节); 数据部分(按数据长度计); 校验码(比如,采用算术和,1个字节,多余的溢出); 包尾(比如固定的1个字节) 这样的结构对编码解析比较简单些,供参考

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧