读书人

关于SOCKET粘包的一些有关问题小弟我

发布时间: 2012-03-21 13:33:14 作者: rapoo

关于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位。

接收宽松:比如说接收到一个数据包,发现校验和不对,会要求重发,数据错误不会让接收端挂掉等等。

具体的实现还需要结合你的需求。我也说的比较乱。凑合看看吧


[解决办法]

探讨

有没有能详细的写出部分代码的谢谢了

读书人网 >C#

热点推荐