关于SOCKET粘包的一些问题,我大概描述了一下,一些细节帮看下怎么处理
你就从收到byte[],如何做缓存,如何判断根据包头判断这个包是新包还是余下的包尾包
比如byte[] rec为收到的包
包可以转成utf8格式为字符串
从rec中先取一个INT packtypeid 指令出来,再取一个INT len包长出来
那我得判断2个变量typeid,len取到的数据是否正常,是否是包尾吧
一般typeid5位数,len一般是大于0而且上于30M以内吧
小于30M以内
如果不在这个范围的可能就不是新包了有可能是包尾了
但是如果这个包尾后面还粘了另一个包的包头呢,这该怎么样拆开呢
拆开然后和上一个包头的组装在一起就得一个完整的包了
可以下发事件了
帮我写这部分 就得了帮我看下怎么处理这些细节问题
------解决方案--------------------
严格发送,宽松接收
如果非要从byte[]中截获消息,然后进行分析。
严格发送:比如说一个数据包可以规定每次发送多少,前多少位是header
header 包括标识,数据长度,后面还有多少个包全都是数据,数据尾标识,校验和,header固定为128位或者多少,即使数据1位也要发送129位。
接收宽松:比如说接收到一个数据包,发现校验和不对,会要求重发,数据错误不会让接收端挂掉等等。
具体的实现还需要结合你的需求。我也说的比较乱。凑合看看吧
------解决方案--------------------