代码之家  ›  专栏  ›  技术社区  ›  Alex

如何处理Java中的套接字断开连接?

  •  13
  • Alex  · 技术社区  · 17 年前

    大家好。我有一个使用ServerSocket和Socket类用java编写的服务器。

    我希望能够检测和处理断开连接,然后在必要时重新连接新的客户端。

    3 回复  |  直到 17 年前
        1
  •  12
  •   Rob    17 年前

    假设您正在从套接字读取,可能在输入流上使用包装器,例如BufferedReader。在这种情况下,当相应的读取操作返回-1(对于raw read()调用)或null(对于readLine()调用)时,可以检测流的结束。

        2
  •  4
  •   Peter Lawrey    17 年前

    检测另一端已消失的唯一安全方法是定期发送心跳,并基于缺少心跳让另一端超时。

        3
  •  -1
  •   steve_stackex    10 年前

    只是我,还是没人注意到JavaDoc在 ServerSocket api

    您只需每隔几秒钟循环一次即可检查其状态:

    if(!serverSocket.isClosed()){
      // whatever you want to do if the serverSocket is connected
    }else{
      // treat a disconnected serverSocket
    }
    

    如果有一个正在侦听的服务器,一旦它拾取了一个客户端连接,它就应该将其传递给工作线程对象,并启动它以异步运行。然后服务器就可以循环回侦听新连接。如果客户机断开连接,则启动的线程将死亡,当它重新连接时,将再次启动一个新线程以处理新连接。

    Jenkov

    推荐文章