Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 处理废弃/断开的插座_.net_Sockets - Fatal编程技术网

.net 处理废弃/断开的插座

.net 处理废弃/断开的插座,.net,sockets,.net,Sockets,如果我有100个设备连接到一个socket服务器,并且客户端断电。重新连接电源后,我将获得100个新的客户端套接字连接 服务器现在将有200个套接字连接。其中100个被遗弃 我需要检测/处理/关闭这些放弃的连接吗?还是.net/windows会检测到并在后台清除这些连接?连接将关闭(假设TCP) 你会知道那些联系已经死了。具体方式取决于您的编码。如果是异步的,您将收到endreceive事件。如果同步下一次读取或写入失败 您已经有了处理异常连接结束的代码(不是吗),在这种情况下,您只需一次获得许

如果我有100个设备连接到一个socket服务器,并且客户端断电。重新连接电源后,我将获得100个新的客户端套接字连接

服务器现在将有200个套接字连接。其中100个被遗弃


我需要检测/处理/关闭这些放弃的连接吗?还是.net/windows会检测到并在后台清除这些连接?

连接将关闭(假设TCP)

你会知道那些联系已经死了。具体方式取决于您的编码。如果是异步的,您将收到endreceive事件。如果同步下一次读取或写入失败


您已经有了处理异常连接结束的代码(不是吗),在这种情况下,您只需一次获得许多异常连接结束的代码

您描述的场景是TCP“KeepAlive”设置的目的之一。由于TCP协议通常不要求任何一方说任何话,除非它有理由相信它知道另一方不知道的关于连接的一些事情,因此,当任何一方在最后一个数据包被确认后都没有说任何话的连接不会产生任何通信量。因此,不可能区分一个已经不存在的设备和一个仍然存在并连接的设备,但它没有任何想要说的东西

如果连接的一方设置了“KeepAlive”,那么如果某一段时间(通常为几分钟)在任一方向都没有任何通信量,该方将假装“忘记”它已收到它发送的最后一个字节的确认,并将因此重新发送该字节。如果连接的另一方仍然活着,它将看到重新传输并识别它(忽略其中的数据),但它将在另一方可能错过先前确认的前提下发送确认,即使对方确实看到先前的确认重新传输,也将是无害的。如果连接的另一方确实存在,但对该连接一无所知,它将立即发送一个“重置”数据包以表明这一点,从而终止该连接。如果连接的另一方不存在,则重新传输的字节将永远不会得到确认;在反复尝试重新发送该字节后,试图发送该字节的一方最终将放弃并终止连接

启用KeepAlive将确保如果连接的一端消失,另一端最终会发现它。保留时间通常相当长(分钟),保留时间只是设定一方开始寻找另一方的时间点。如果另一方消失了,系统可能需要一分钟左右的时间来判断另一方是否真的消失了。不过,几分钟后发现另一方失踪通常比根本不知道要好