当前位置: 代码迷 >> J2SE >> java socket 拆包与组包,该如何解决
  详细解决方案

java socket 拆包与组包,该如何解决

热度:11155   发布时间:2013-02-25 00:00:00.0
java socket 拆包与组包
我写了一个java 服务端。从一个客户端传输1,0,1 到另外一个客户端一秒30次。server 端打印出来次数是对的。但是到另外一个客户端的时候发现发生粘包。次数也明显少了。求大侠帮忙。。
引用:
引用:发送频率不算高呀,你直接发送字符串???

建议将用对象流,最好把要发送的东西封装在一个对象中,并序列化后发送。
发送的是字符串

直接用对象流吧,把字符串对象发送。
引用:
不知道你传送的数据要求多长的,比较简单的情况下,假设你只传送int的话,不需要去转字符串
发送到时候,直接write(int),读取的时候如果是按照byte[]形式读取的话,每次就读取4byte
记得objectinpustream有readInt()

至于TCP数据包做法,GOOGLE吧,一句二句说不清楚


发送的是字符串。google现在已经不好用了。。。
你所谓的粘包是神马东西?读取长度问题?
你的传输没有长度规定的吗?
那至少得做成包头包体的数据包吧不知道你传送的数据要求多长的,比较简单的情况下,假设你只传送int的话,不需要去转字符串
发送到时候,直接write(int),读取的时候如果是按照byte[]形式读取的话,每次就读取4byte
记得objectinpustream有readInt()

至于TCP数据包做法,GOOGLE吧,一句二句说不清楚发送频率不算高呀,你直接发送字符串???

建议将用对象流,最好把要发送的东西封装在一个对象中,并序列化后发送。
引用:
发送频率不算高呀,你直接发送字符串???

建议将用对象流,最好把要发送的东西封装在一个对象中,并序列化后发送。

发送的是字符串发送次数有点快。

这样的话,最好用异步接收的方式null项目结束了。。。问题也解决了。字符串就按字节来呗
比如定长8字节表示一个数据
发送的时候以8字节为单位发送,接收到时候同样以8字节接收,数字可以左补0

比如需要发送三个数字 4,15,200
发送到时候应该是 000000040000001500000200
读取的时候8字节读一次
引用:
发送频率不算高呀,你直接发送字符串???

建议将用对象流,最好把要发送的东西封装在一个对象中,并序列化后发送。


觉得这个可以试试
引用:
你所谓的粘包是神马东西?读取长度问题?
你的传输没有长度规定的吗?
那至少得做成包头包体的数据包吧


能给个例子么? 谢谢
  相关解决方案