如何检测到客户端已与服务器断开连接?
我有下面的代码在我的AcceptCallBack方法
AcceptCallBack
static Socket handler = null; public static void AcceptCallback(IAsyncResult ar) { //Accept incoming connection Socket listener = (Socket)ar.AsyncState; handler = listener.EndAccept(ar); }
我需要找到一种方法来尽快发现客户端已从handlerSocket 断开连接。
handler
我试过了:
handler.Available;
handler.Send(new byte[1], 0, SocketFlags.None);
handler.Receive(new byte[1], 0, SocketFlags.None);
当您连接到服务器并想检测服务器何时断开连接时,上述方法可以工作,但是 当您是服务器并想检测客户端断开 连接时,上述方法不起作用 。
任何帮助将不胜感激。
由于没有事件可用于在套接字断开连接时发出信号,因此您将必须以可接受的频率对其进行轮询。
使用此扩展方法,您可以拥有一种可靠的方法来检测套接字是否断开连接。
static class SocketExtensions { public static bool IsConnected(this Socket socket) { try { return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0); } catch (SocketException) { return false; } } }