Auf der Client-Seite muss ich wissen, ob/wenn meine Socket-Verbindung unterbrochen wurde. Die Eigenschaft Socket.Connected gibt jedoch immer true zurück, auch nachdem die Serverseite getrennt wurde und ich versucht habe, Daten über diese Seite zu senden. Kann mir jemand helfen, herauszufinden, was hier vor sich geht? Ich muss wissen, wann ein Socket getrennt wurde.So erkennen Sie, wenn ein Socket getrennt wurde
Socket serverSocket = null;
TcpListener listener = new TcpListener(1530);
listener.Start();
listener.BeginAcceptSocket(new AsyncCallback(delegate(IAsyncResult result)
{
Debug.WriteLine("ACCEPTING SOCKET CONNECTION");
TcpListener currentListener = (TcpListener)result.AsyncState;
serverSocket = currentListener.EndAcceptSocket(result);
}), listener);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Debug.WriteLine("client socket connected: " + clientSocket.Connected);//should be FALSE, and it is
clientSocket.Connect("localhost", 1530);
Debug.WriteLine("client socket connected: " + clientSocket.Connected);//should be TRUE, and it is
Thread.Sleep(1000);
serverSocket.Close();//closing the server socket here
Thread.Sleep(1000);
clientSocket.Send(new byte[0]);//sending data should cause the socket to update its Connected property.
Debug.WriteLine("client socket connected: " + clientSocket.Connected);//should be FALSE, but its always TRUE
Siehe http://stackoverflow.com/questions/722240/instantly-detect-client-disconnection-from-server-socket für die weitere Diskussion. – EricLaw