我的应用程序使用tcp套接字在两台服务器之间进行通信。在一台服务器A(充当服务器)上,端口是恒定的(9590),而另一台服务器B则是使用随机可用端口进行连接的客户端到服务器的9590端口。
问题是,在成功建立TCP连接之后,通信可以正常工作。但是在几个小时(例如2个小时)内,如果应用程序处于空闲状态,即当与服务器A的9590端口没有通信时,则连接被挂起向上。
因此,当应用程序(客户端)在此空闲时间之后再次尝试与9590通信时,TCP握手将失败。重新发送10个数据包后,由于没有响应,TCP连接将断开,并且将建立新的连接。
那么可能是连接挂起的原因。如何使连接保持活动状态。
在观察“ netstat”的输出时,发现在握手过程中端口的发送方队列被某些包阻塞了:
netstat -n | grep 9590
tcp 0 530 客户端服务器:random_port服务器:9590