为什么我每次把客户端的socket连接关闭的时候,服务器端就会收到大量的空包?

时间:2022-02-18 23:51:19
客户端:Socketabc.Close();(两端都是采用异步)
然后就会在服务器端接收到无数个空包?是什么原因

6 个解决方案

#1


关注中——————
我也是碰到这种情况,没有解决——————

#2


up

#3


正常的,当SOCKET一端逻辑终止时(不是物理终止,比如拨网线),另一端就会认为收到了数据,但这个数据包的大小是0,你可以用这个来判断SOCKET是否出现故障了,这时你必须对此进行处理,比较关闭这个连接,否则每次检查时都会认为收到一个空包。

#4


情况确实如 Lastcsdner(外行) 所说的一样,那还有什么情况会导致此情况的发生,用什么方法去处理这类情况是最好的?

#5


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

#6


up

#1


关注中——————
我也是碰到这种情况,没有解决——————

#2


up

#3


正常的,当SOCKET一端逻辑终止时(不是物理终止,比如拨网线),另一端就会认为收到了数据,但这个数据包的大小是0,你可以用这个来判断SOCKET是否出现故障了,这时你必须对此进行处理,比较关闭这个连接,否则每次检查时都会认为收到一个空包。

#4


情况确实如 Lastcsdner(外行) 所说的一样,那还有什么情况会导致此情况的发生,用什么方法去处理这类情况是最好的?

#5


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

#6


up