java - 检测客户端何时不再监听服务器

标签 java android sockets serversocket

我正在编写一个应用程序,该应用程序可以传输数据,然后客户端可以监听和接收。然而,当客户端不再监听时,我遇到了关闭套接字的问题。

我所做的是创建一个 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/

相关文章:

java - 在 IE9 和 IE9 平台预览版中,我无法再从 Java Applet 调用 Javascript 方法

java - 使用 Hibernate Criteria API 查询与投影的多对一关系

java - 访问 Youtube API

java - 消息未发送回 Java 中的客户端

macos - 使用 NKE 更改数据包接口(interface)

java - 输入字符串 999999999 的 NumberFormatException

java - 如何在 Spring Web 应用程序中添加乌尔都语语言支持

android - 如何从模板更新 Android 项目?

java - Gson:将 MySQL 日期时间反序列化为 Java 对象

sockets - trigger.io 可以打开 TCP 套接字吗?