首页 > 其他 > 详细

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

时间:2018-05-30 17:16:07      阅读:528      评论:0      收藏:0      [点我收藏+]

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

 

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

 

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

 

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

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

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

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