如何知道客户端何时在C#中与服务器断开连接?
我有一个C#语言的客户机-服务器程序。如何知道客户端何时在C#中与服务器断开连接?,c#,client-server,C#,Client Server,我有一个C#语言的客户机-服务器程序。 以下是服务器的代码: ... String dataFromClient = ""; NetworkStream networkStream; TcpClient clientSocket; bool transfer = true; ... while (transfer) { networkStream = clientSocket.GetStream(); networkStre
以下是服务器的代码:
...
String dataFromClient = "";
NetworkStream networkStream;
TcpClient clientSocket;
bool transfer = true;
...
while (transfer)
{
networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
....
}
我想设置一个条件,在客户端断开连接时停止循环。我该怎么做?
非常感谢,好吧,试试看——如果客户端断开连接,您会发现在某一点上出现IoException。需要多长时间-可能需要很长时间(如果通过网络中断/电源中断的方式进行连接,并且TCP堆栈必须等待超时)
结束的“正确”方式是客户端向服务器发送一个end命令,服务器在该命令上断开客户端的连接。这使服务器能够尽可能快地摆脱客户机。许多internet协议都实现了这一点,无论是隐式的(HTTP-除非要求不同的服务器在发送数据后断开客户端连接),还是显式的(SMTP-客户端应该向服务器发送退出命令)。我的问题就像你在回答的第一部分中说的:由于网络问题,客户端断开了连接,所以发生时我无法发送信号。你还有别的想法吗?没有。你基本上是在等待异常发生。没有别的办法。但正如你所说,这可能需要很长时间。我需要知道,如果不是在它发生的那一秒,那么在它发生后的2分钟内。然后在客户端和服务器之间运行常规通信。在两种情况下,我在客户机和服务器之间有一个基于消息的协议,例如,每秒钟从双方发送一个ping(以测量往返时间)