首页 文章

你如何处理Java中的Socket Disconnecting?

提问于
浏览
13

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

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

检测客户端断开连接,关闭套接字,然后接受新客户端的正确步骤是什么?

3 回答

  • 12

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

    某些操作在关闭的套接字上执行时会导致SocketException,您还需要适当地处理它 .

  • 4

    检测另一端的唯一安全方法是定期发送心跳,并根据缺乏心跳使另一端超时 .

  • 0

    它只是我,还是没有人注意到JavaDoc在ServerSocket api下声明了一个方法,它允许我们根据serversocket的关闭状态获取一个布尔值?

    你可以每隔几秒循环检查它的状态:

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

    编辑:只是再次阅读您的问题,似乎您需要服务器只是不断搜索连接,如果客户端断开连接,它应该能够重新检测客户端何时尝试重新连接 . 不应该只是你的解决方案吗?

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

    Jenkov提供了此实现的一个很好的例子 .

相关问题