【发布时间】:2015-12-26 23:14:02
【问题描述】:
我想知道在TcpClient 的NetworkStream 上如果发生超时究竟会发生什么。
在调试代码时,我发现在发送请求后,如果在提到的超时期限内没有收到数据,它会抛出异常并不幸关闭连接(TcpClient.Connected 变为 false):
无法从传输连接中读取数据:连接 尝试失败,因为连接方没有正确响应 一段时间后,或建立连接失败,因为 连接的主机未能响应。
抛出异常没关系,但我想知道如何防止它关闭连接。
如果有人能就此提供更多见解,那就太好了。
【问题讨论】:
-
通常,服务器的设计方式是在客户端不活动一段时间后强制关闭连接。这允许更有效地利用服务器资源。但看看你的信息,我想,这不是你的情况。看起来您只是无法连接到您的服务器。请发布 MCVE (stackoverflow.com/help/mcve)。
-
如果连接从未完成,您将无法保持打开状态。所以我假设超时发生在初始连接之后。如果服务器关闭连接,则您无法阻止连接关闭。通常,服务器会在空闲时关闭连接。在这种情况下,您使用 KeepAlive 选项,该选项会定期向服务器发送空数据报,因此服务器不会关闭连接。
-
该异常意味着您的 Connect 调用失败。这与阅读无关。尚未建立连接。邮政编码。由于缺少代码,暂时关闭。无法诊断。