我编写了java客户端服务器套接字连接代码。在服务器接受客户端连接,然后服务器使用PrintStream发送数据,客户端读取readline()中的数据。在此之后,客户端将在readline中等待服务器。如果网络断开连接,客户端将继续在readline中等待,并且永远不会退出readline。有没有办法检测客户端本身的断开连接?或者我是否必须编写新的心跳线程来检查网络断开连接?
答案 0 :(得分:0)
在套接字上打开套接字选项SO_KEEPALIVE。这将启用TCP协议中内置的心跳功能。
这是开启此功能的简单方法。
Socket socket = ...; // Your socket on the client side
socket.setKeepAlive(true);
如果连接的另一端停止响应心跳,您将通过呼叫IOException
从套接字读取。
但是,超时为2小时。这可能对您的需求来说太长了(您没有指定)
答案 1 :(得分:-1)
clientSocket.isConnected()
:这是错误的,这不会返回true并且会一直返回false,直到服务器也断开连接IOException (Broken Pipe)
socket.keepAlive(true)
这将使用套接字内置的心跳功能,因此您将获得异常。干杯。