Del lado del cliente, necesito saber cuándo/si mi conexión de socket se ha roto. Sin embargo, la propiedad Socket.Connected siempre devuelve verdadero, incluso después de que se haya desconectado el lado del servidor y he intentado enviar datos a través de él. ¿Alguien puede ayudarme a descubrir qué está pasando aquí? Necesito saber cuándo se ha desconectado un enchufe.Cómo saber cuándo se ha desconectado un zócalo
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
Consulte http://stackoverflow.com/questions/722240/instantly-detect-client-disconnection-from-server-socket para obtener más información. – EricLaw