你如何处理Java中的Socket断开连接?

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

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

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


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

某些操作在封闭套接字上执行时会导致SocketException,您还需要适当处理。


检测另一端的唯一安全方法是定期发送心跳信号,并根据缺少心跳信号将另一端设置为超时。


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

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

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

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

有一个正在监听的服务器,一旦它拿起一个客户端连接,它应该将它传递给一个工作线程对象并启动它以异步操作。 然后服务器可以循环回听新的连接。 如果客户端断开连接,则启动的线程会死机,重新连接时会再次启动新线程以处理新连接。

Jenkov提供了这个实现的一个很好的例子。

链接地址: http://www.djcxy.com/p/9687.html

上一篇: How do you handle Socket Disconnecting in Java?

下一篇: What is the difference between a port and a socket?