您知道如果我不对套接字做任何操作,如何保持套接字连接存活吗?我只是注意到,如果我的连接是在后台,我不操作它,我得到这个:
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.writeInt(Unknown Source)
那么,我如何控制连接在空闲时间之后不会丢失,以及默认情况下它会在多长时间之后发生?
这个问题没有一般的解决办法。很可能是远程服务器/服务决定重置/关闭TCP/IP连接。它决定的方式和原因是特定于应用程序的。需要一个特定于应用程序的解决方案来防止它。
FWIW, SO_KEEP_ALIVE机制导致协议栈偶尔在空闲的TCP/IP连接上交换消息。如果您遇到由于端口重用而导致的nat连接重置,这可能会有所帮助。相关的Java方法是Socket.setKeepAlive
.
连接复位:socket write error
这通常是由于写入已被对等端关闭的连接而引起的。这是一个应用程序协议错误。在担心连接生命周期之前,您应该先调查一下这个问题。