【问题标题】:How to know when the Client is disconnected from Server in C#?如何知道客户端何时与 C# 中的服务器断开连接?
【发布时间】:2011-02-22 06:44:34
【问题描述】:

我有一个 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("$"));
         ....
     }

我想创建一个条件,在客户端断开连接时停止循环。
我该怎么做?
非常感谢,

【问题讨论】:

    标签: c# client-server


    【解决方案1】:

    不尝试发送一些数据是不可能的。

    在stackoverflow上有一个很好的讨论,但我现在似乎无法找到它......

    【讨论】:

      【解决方案2】:

      确实不可能直接检测到这一点。你只能尽量减少“伤害”。

      为什么不可能?

      因为 TCP 流不发送任何数据来检查连接是否仍然存在(这会导致不必要的开销而没有什么好处)。您必须手动启动此类检查。一个简单的想法是定期 ping 以查看连接是否仍在工作。

      我该如何处理?

      在尝试读/写之前,请务必检查 Connected 属性。这不过是一个简单的健全性检查,Connected 状态总是过时的(这是由于上面解释的其性质,无法更改)。

      无论如何,你仍然需要始终处理连接异常——不可能保证传输一定会成功,你只能在连接已经丢失的情况下尽量避免写入。

      如果您发现传输失败,您必须以某种方式处理它。您可以缓存数据并尝试重新连接,然后再次发送。或者您可以忽略失败的传输。这取决于您的具体要求。

      【讨论】:

        猜你喜欢
        • 2018-02-20
        • 2021-12-22
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多