码迷,mamicode.com
首页 > 其他好文 > 详细

Socket服务端一直收空包的原因与解决方法

时间:2018-05-30 17:38:10      阅读:2111      评论:0      收藏:0      [点我收藏+]

标签:连接   百度   系统   stream   服务器   用户   死机   异常   代码   

最近做socket服务端,大部分时候系统是正常的,但是运行个一段时间就会一直以超高的频率收到很多数据,一开始以为是下位机上报的,没怎么上心,后来下位机工程师说他们没上报,所以重新看了下代码,发现程序会一直调用 netStream.BeginRead,EndRead,一直收数据,而且受到的数据包都是0字节,百度了20分钟,大神们说socket客户端正常关闭的时候服务端会收到一个长度是0的数据包,如果一直循环调用会一直收到,原话如下

 

出现原因:一、用户正常退出,这时你还循环调用了Receive方法时会出现。并会陷入死循环。
    二、用户非正常退出,包括拔网线,死机,服务器会捕捉到一个异常
处理方法:一、你只要在循环里对数据进行判断一下,如果数据为0就中止循环,并关闭此Socket连接即可

 

确实是这样,测试的客户端没写socket.Clost(),都是直接关闭,所以能不做的客户端退出;当客户端点击断开连接后服务端就会收到一个空包,而且Connected还是true,如果没判断是否是空包的换会一直循环接收空包,所以每次收到数据的时候需要判断是包的长度,如果是0就中断循环,并关闭socket。

 

新人私人备忘,如果有说错的地方希望大神指出。

Socket服务端一直收空包的原因与解决方法

标签:连接   百度   系统   stream   服务器   用户   死机   异常   代码   

原文地址:https://www.cnblogs.com/bbyn/p/9111893.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!