套接字编程多少时间套接字连接是活的?我怎么能控制它呢?



您知道如果我不对套接字做任何操作,如何保持套接字连接存活吗?我只是注意到,如果我的连接是在后台,我不操作它,我得到这个:

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

这通常是由于写入已被对等端关闭的连接而引起的。这是一个应用程序协议错误。在担心连接生命周期之前,您应该先调查一下这个问题。

最新更新