首页 > 其他 > 详细

TCP粘包处理 参考spserver

时间:2015-10-25 19:22:06      阅读:210      评论:0      收藏:0      [点我收藏+]
TCP粘包出现的原因就不在详细描述了。TCP粘包是在做TCP编程时经常会遇到的问题,网上相关的参考也不少,大都都是一个热心人士编写的,
若仅用于学习就算了,若用真正用于项目还有待考虑。
本文就简述一下如何利用spserver处理粘包问题。SPserver的性能有多好我也不说了。(嘎嘎)
处理思路如下:
1.SP_MultiLineMsgDecoder中的decoder是用于分解包,当然分解的原来是使用‘\n’.我们利用该函数的原来分包。
2.SP_CircleQueue * mQueue; 用于存储分解后的包。
3.SP_Buffer 用于存储收到的报文。
4.那如何读取包呢? spwin32buffer_read( getEvBuffer( session->getInBuffer() ), mFd, -1 ); 在该函数内部,使它使用了itcl判断报文的数量,然后在SP_Buffer分配对应的空间,
分配函数为if (spwin32buffer_expand(buf, howmuch) == -1)
5.需要注意的是解包时,需要将完整的包读至SP_CircleQueue中,调用函数为spwin32buffer_remove。
写完速度测试完全对应 echoServer没有问题。
 

TCP粘包处理 参考spserver

原文:http://www.cnblogs.com/corecible/p/4909174.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!