我有一个服务器应用程序,运行在Linux机器上。我可以从Windows/Linux机器连接到这个应用程序,并发送/接收数据。几个小时后,客户端会出现以下错误:
在Windows上:
我能否找到解决这个问题的方法,还是当连接被强制关闭时,我应该尝试重新连接到服务器? 编辑:我已经跟踪了这个情况。我向远程节点发送了一条数据,并在等待5个小时后发送了另一条数据。发送方发送了第一条数据,但当发送方发送第二条数据时,没有响应。发送方的TCP/IP堆栈通过增加重试次数重复了这个过程5次。最后,发送方重置了连接。我不能确定为什么会发生这种情况(可能是由于防火墙或NAT - 请参见第2.4节),但我采用了两种不同的方法来解决这个问题:
在Windows上:
远程主机强制关闭了一个现有的连接
在Linux上:连接超时
我在网上搜索并找到一些帖子建议增加/减少操作系统的保持活动时间。然而,这对我没有起作用。我能否找到解决这个问题的方法,还是当连接被强制关闭时,我应该尝试重新连接到服务器? 编辑:我已经跟踪了这个情况。我向远程节点发送了一条数据,并在等待5个小时后发送了另一条数据。发送方发送了第一条数据,但当发送方发送第二条数据时,没有响应。发送方的TCP/IP堆栈通过增加重试次数重复了这个过程5次。最后,发送方重置了连接。我不能确定为什么会发生这种情况(可能是由于防火墙或NAT - 请参见第2.4节),但我采用了两种不同的方法来解决这个问题:
- 使用setsockopt使用TCP/IP保持活动状态(第4.2节)
- 进行应用程序级别的保持活动状态。这更可靠,因为第一种方法与操作系统有关。