Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道客户端何时在C#中与服务器断开连接?_C#_Client Server - Fatal编程技术网

如何知道客户端何时在C#中与服务器断开连接?

如何知道客户端何时在C#中与服务器断开连接?,c#,client-server,C#,Client Server,我有一个C#语言的客户机-服务器程序。 以下是服务器的代码: ... String dataFromClient = ""; NetworkStream networkStream; TcpClient clientSocket; bool transfer = true; ... while (transfer) { networkStream = clientSocket.GetStream(); networkStre

我有一个C#语言的客户机-服务器程序。
以下是服务器的代码:

...
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(以测量往返时间)