【发布时间】:2014-06-28 04:57:51
【问题描述】:
我有一个在 Linux 机器上运行的服务器应用程序。我可以从 Windows/Linux 机器连接这个应用程序并且可以发送/接收数据。几个小时后,发生了一些事情,我在客户端收到以下错误。
在 Windows 上:An existing connection was forcibly closed by the remote host
在 Linux 上:Connection timed out
我在网上进行了搜索,发现了一些建议增加/减少操作系统保持活动时间的帖子。但是,它对我不起作用。
我是否可以找到解决此问题的方法,或者我应该在连接被强制关闭时简单地尝试重新连接到服务器?
编辑:我已经跟踪了情况。我向远程节点发送了一个数据,并在等待 5 小时后发送了另一个数据。发送方发送了第一个数据,但是发送方发送了第二个数据它没有响应。发送方的 TCP/IP 堆栈通过增加重试之间的时间重复此 5 次。最后,发送者重置连接。我不能确定为什么会发生这种情况(可能是因为防火墙或 NAT - 请参阅 Section 2.4),但我采用了两种不同的方法来解决这个问题:
- 通过 setsockopt (Section 4.2) 使用 TCP/IP 保持活动状态
- 使应用程序级别保持活动状态。这更可靠,因为第一种方法与操作系统相关。
【问题讨论】:
-
你读过这个问题/答案了吗:stackoverflow.com/questions/2582036/…
-
我现在读了。我将通过wireshark跟踪交换的数据,谢谢。
标签: tcp network-programming tcp-ip