2015-12-26 35 views
0

我想知道TcpClientNetworkStream如果发生超时到底发生了什么。如果没有收到数据流tcpclient关闭连接

在调试我发现的代码,经过请求被发送,并且如果没有数据被提及的超时周期内接收到它抛出异常下面,不幸的是关闭连接(TcpClient.Connected成为假):

无法读取数据从传输连接:连接 尝试失败,因为连接方在一段时间后没有正确响应 ,或者由于连接的主机未能响应,建立的连接失败。

它引发异常是好的,但我想知道我可以如何防止它关闭连接。

如果有人能提供更多的见解,这将是非常好的。

+0

通常情况下,服务器的设计方式会在客户端停止一段时间后强制关闭连接。这允许更有效地利用服务器资源。但是,我想,看看你的信息,那不是你的情况。看起来你不能连接到你的服务器。请发布MCVE(http://stackoverflow.com/help/mcve)。 – Dennis

+0

如果连接从未完成,则无法保持打开状态。所以我假设超时发生在初始连接之后。如果服务器关闭连接,则无法阻止连接关闭。通常,服务器在闲置时会关闭连接。在这种情况下,您使用KeepAlive选项,该选项定期向服务器发送一个空数据文件,以便服务器不关闭连接。 – jdweng

+0

该异常意味着您的连接呼叫失败。这与阅读无关。尚未建立连接。邮政编码。由于缺少代码而暂时关闭。 Undiagnosable。 – usr

回答

1

你检查了这一个吗? Reconnect TCPClient after interruption我想如果你有足够长的TCP连接TTL,如果发生异常(我相信你会抛出一个SocketException),你可以捕获它并启动你的重试逻辑。有几种实现方式,显然这取决于用例,但通常在“放弃”连接之前会有多次尝试(配置值)。这样,您的经理将重新尝试连接X次,如果连接成功,将继续进行,否则会在链中传播异常。