用Socket,UDP协议,客户端向服务器发送登陆请求后,服务器就获得了客户端的通信IP和端口(System.Net.IPEndPoint),然后通过它用定时器持续地向客户端发送数据。
而假如客户端关闭了应用程序后,服务器与客户端的通信自然就会断开。此时,服务器调用System.NetSocket.ReceiveFrom 会持续地捕获到一个编号为10054的Socket错误(远程主机强迫关闭了现有的一个连接),因为服务器正在用定时器不断地往已不能用的远程端口发送数据。
现在的问题是:
如何在得到上述10054错误(远程主机强迫关闭了现有的一个连接)后,判断到底是哪个远程主机关闭了现有的一个“连接”。
补充两点:1、UDP是无连接的协议;2、服务器正同时与多个远程客户端通信。
而假如客户端关闭了应用程序后,服务器与客户端的通信自然就会断开。此时,服务器调用System.NetSocket.ReceiveFrom 会持续地捕获到一个编号为10054的Socket错误(远程主机强迫关闭了现有的一个连接),因为服务器正在用定时器不断地往已不能用的远程端口发送数据。
现在的问题是:
如何在得到上述10054错误(远程主机强迫关闭了现有的一个连接)后,判断到底是哪个远程主机关闭了现有的一个“连接”。
补充两点:1、UDP是无连接的协议;2、服务器正同时与多个远程客户端通信。
http://topic.csdn.net/t/20031218/18/2578622.html
因为在用ReceiveFrom时分明就收到了“远程主机连接断开”的异常,这表明可能会有某种方法来判断到底是其中哪个远程主机断开了连接。频繁地收到异常会影响程序性能的。假如我设置50秒未收到客户端的主动回应就认为断线,那么,我就可能会有50秒的时间是在不停地捕获到这个“远程主机强迫关闭了现有的一个连接”异常。
ReceiveFrom出錯,你就不要再從這個EndPoint接收了
当我遇到错误时,EndPoint正处于不可用状态,无法查看。(当有多个客户端时)无法判断该停止与哪个IP:端口之间的通信。
这正是问题之关键所在。
能看下代碼?