我正在编写一个应用程序,该应用程序可以传输数据,然后客户端可以监听和接收。然而,当客户端不再监听时,我遇到了关闭套接字的问题。
我所做的是创建一个 ServerSocket,然后等待连接,一旦连接,我就开始传输数据。然而,一旦客户端不再连接,我就会陷入流媒体循环中,无法判断是否有人在监听。有办法解决这个问题吗?
try {
serverSocket = new ServerSocket(STREAM_PORT);
Socket clientSocket = serverSocket.accept();
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(), true);
while (true) {
pw.println("some data");
}
} catch (SocketException e) {
// Never occurs when client disconnects
} catch (IOException e) {
// Never occurs when client disconnects
}
我尝试过使用socket.isClosed(),但它总是返回false。我是否从错误的角度处理这个问题,或者有没有办法做到这一点。理想情况下,我不希望客户端必须向服务器发送“结束”命令。
编辑:编辑以反射(reflect)我在 @Rod_Algonquin 建议后运行的当前代码
最佳答案
由于您使用的是PrintWriter
,它会吞掉I/O异常,因此您需要在每次写入后调用checkError()
来查看是否发生错误。
关于java - 检测客户端何时不再监听服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481533/