如何使用 NetworkStream.DataAvailable 属性 检测 TCP 连接失败?

How to detect TCP connection failure using NetworkStream.DataAvailable property?

当对TCP使用Socket时,在连接丢失时尝试读取数据会抛出异常。 我习惯于使用异常来了解 TCP 操作何时失败,因为除非尝试 read/write,否则无法可靠地判断连接已断开。

但我只是注意到 NetworkStream.DataAvailable 在这种情况下只是 returns false,并且 TcpClient.GetStream 也 returns 成功了。我有如下代码(在轮询循环中使用)- 有没有办法扩展这种检测失败连接的方法?

    public int Read()
    {
        var stream = tcp.GetStream();
        if (!stream.DataAvailable)
            return 0;
        else
            return stream.Read(InBuffer, 0, InBuffer.Length);
    }

如果不是,那么我将不得不使用超时调用 Read 方法之一——这让我想知道 DataAvailable 的意义何在,因为它很容易导致连接失败的错误未检测到。

没有

看,当连接断开时你得到一个异常。

DataAvailable 可能暂时没有可用数据。数据包需要时间来传输,并且数据包可能会丢失。 TCP 具有重发列表数据包的机制,但它会导致延迟。

GetStream returns 流。这是你的终点。它 returns 它在连接可用时发送,这是有道理的。 DataAvailable 用于检查是否有数据等待。数据不等待不是连接丢失 - 它是数据不等待。