【问题标题】:Socket Programing java - how much time socket connection is alive? And how can I control it?Socket Programing java - 套接字连接存在多长时间?我该如何控制它?
【发布时间】:2023-11-02 20:22:01
【问题描述】:

如果我不对套接字执行任何操作,您知道如何使套接字连接保持活动状态吗? 我刚刚注意到,如果我的连接在后台并且我不操作它,我会得到这个:

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)

那么,我该如何控制连接不会在空闲一段时间后丢失,默认情况下会在多长时间后丢失呢?

【问题讨论】:

标签: java sockets websocket socket.io serversocket


【解决方案1】:

这个问题没有通用的解决方案。远程服务器/服务很可能已决定重置/关闭 TCP/IP 连接。它如何以及为什么决定是特定于应用程序的。需要一个特定于应用程序的解决方案来防止它。

FWIW,SO_KEEP_ALIVE 机制导致协议栈偶尔在空闲的 TCP/IP 连接上交换消息。如果您因端口重用而在 NATed 连接上遇到重置,这可能会有所帮助。相关的Java方法是Socket.setKeepAlive

【讨论】:

  • 好的,谢谢,您有任何指向您指定的机制的链接吗?我可以尝试一下,如果有帮助,我将在 ubuntu 10 上运行我的服务器。
  • 有什么方法可以控制keepalive超时时间?
【解决方案2】:

对等连接重置:套接字写入错误

这通常是由于写入已被对等方关闭的连接造成的。这是一个应用程序协议错误。在担心连接生命周期之前,您应该先对此进行调查。

【讨论】:

    最近更新 更多