从输入流中释放被 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() 告诉你底层连接已经消失。
对于稳健的解决方案,您应该处理两种情况:
readLine() returns空;这是 'normal end of stream',如果客户端完全关闭连接,我希望它会发生。
readLine() 抛出 IOException,您需要 try-catch 来处理。如果连接突然终止,可能会发生这种情况,如果客户端在没有关闭连接的情况下退出。
根据您的程序要求,您可以决定是否对这两种可能性进行相同的处理。
我使用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() 告诉你底层连接已经消失。
对于稳健的解决方案,您应该处理两种情况:
readLine() returns空;这是 'normal end of stream',如果客户端完全关闭连接,我希望它会发生。
readLine() 抛出 IOException,您需要 try-catch 来处理。如果连接突然终止,可能会发生这种情况,如果客户端在没有关闭连接的情况下退出。
根据您的程序要求,您可以决定是否对这两种可能性进行相同的处理。