[导入]令我困扰的粘包问题。

最近看了非常多精彩的socket文章,让我获益不少。但依然没法完全解决粘包的问题。

客户端,封包。把数据用一个类封装起来,此数据应该分为三个部分,分别为包头,包身,包尾(这个我没有用到)。其中包头包括了协议类型和数据长度,包身就是数据了。
服务端,拆包。先建立一个固定长度的缓冲区,当数据把这个缓冲区填充后,分析包头,把类型和长度(假设为M)取出。把包身(假设长度为N)截取M字节。如果M =N,则数据包完整。如果M > N,数据包不完整,继续循环接收。如果M<N,有完整数据包,但还有第二个包紧跟其后(粘包)。



牛牛猪 2008-06-17 00:27 发表评论

文章来源:http://www.cnitblog.com/cmoron/archive/2008/06/17/45795.html
posted @ 2008-06-17 00:27  牛牛猪  阅读(284)  评论(0编辑  收藏  举报