如何从客户端检测网络断开(JAVA)

时间:2015-04-03 05:31:23

标签: java sockets

我编写了java客户端服务器套接字连接代码。在服务器接受客户端连接,然后服务器使用PrintStream发送数据,客户端读取readline()中的数据。在此之后,客户端将在readline中等待服务器。如果网络断开连接,客户端将继续在readline中等待,并且永远不会退出readline。有没有办法检测客户端本身的断开连接?或者我是否必须编写新的心跳线程来检查网络断开连接?

2 个答案:

答案 0 :(得分:0)

在套接字上打开套接字选项SO_KEEPALIVE。这将启用TCP协议中内置的心跳功能。

这是开启此功能的简单方法。

Socket socket = ...; // Your socket on the client side
socket.setKeepAlive(true);

如果连接的另一端停止响应心跳,您将通过呼叫IOException从套接字读取。

但是,超时为2小时。这可能对您的需求来说太长了(您没有指定)

答案 1 :(得分:-1)

断开与客户端的连接:

  1. clientSocket.isConnected():这是错误的,这不会返回true并且会一直返回false,直到服务器也断开连接
  2. 您可以尝试通过输出流发送数据,然后您会收到异常,特别是IOException (Broken Pipe)
  3. 您也可以使用socket.keepAlive(true)这将使用套接字内置的心跳功能,因此您将获得异常。
  4. 干杯。