【发布时间】:2020-08-18 20:41:01
【问题描述】:
在 TCP 使用Socket 时,在连接丢失时尝试读取数据将引发异常。
我习惯于使用异常来了解 TCP 操作何时失败,因为除了尝试读/写之外,您无法可靠地判断连接已断开。
但我刚刚注意到NetworkStream.DataAvailable 在这种情况下只是返回false,而TcpClient.GetStream 也成功返回。我有如下代码(在轮询循环中使用) - 有没有办法扩展这种方法来检测失败的连接?
public int Read()
{
var stream = tcp.GetStream();
if (!stream.DataAvailable)
return 0;
else
return stream.Read(InBuffer, 0, InBuffer.Length);
}
如果不是,那么我将不得不使用超时调用 Read 方法之一 - 这让我想知道 DataAvailable 的意义何在,因为它很容易导致无法检测到失败连接的错误。
【问题讨论】:
标签: c# .net tcplistener