从输入流中释放被 read() 阻塞的数据块?

Set free the data chunk blocked by read() from input stream?

我使用getInputStream().read() 来检查客户端是否已与服务器断开连接。它可以工作,但是 read() 函数,正如它在文档中所述,会阻止消息的第一个字母。所以它不是打印“Hello”,而是打印“ello”。如何使第一个字母的 read() 函数成为 'let go'? 以下是等待输入的服务器代码:

            while(true)
            {
                if(socket.getInputStream().read()==-1)//if no response
                    break;
                String msg = bufferedReader.readLine();
                if(msg!=null) {
                    System.out.println("Received message: " + msg);
                }

            }

如果没有办法解决这个问题,那么 getInputStream().read() 检测客户端断开连接的替代方法是什么?

正确的方法是完全不使用单独的 read()。简单地处理 readLine() 告诉你底层连接已经消失。

对于稳健的解决方案,您应该处理两种情况:

  1. readLine() returns空;这是 'normal end of stream',如果客户端完全关闭连接,我希望它会发生。

  2. readLine() 抛出 IOException,您需要 try-catch 来处理。如果连接突然终止,可能会发生这种情况,如果客户端在没有关闭连接的情况下退出。

根据您的程序要求,您可以决定是否对这两种可能性进行相同的处理。