套接字:BufferedReader readLine()块

| 我正在使用
BufferedReader.readLine()
方法从远程服务器读取响应(该服务器使用C语言编写,并且无法访问源代码)。
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while((line = br.readLine())!=null){
    [...]
}
但是它总是在最后一行阻塞,直到超时为止。所以我用下面的代码:
int b;
while(true){
   b = in.read;
   [...]
}
我发现读取的最后一个字节的整数值为13,我认为这是回车,对吗? 那么为什么
readLine
方法会阻塞?服务器通常如何发出信号通知流结束?谢谢。     
已邀请:
在网络连接的情况下,当套接字关闭时,流终止。 因此,
readLine()
阻塞直到收到“行尾”或您手动关闭连接是完全正常的。当您的
readLine()
接收到带有\ '13 \'值的最后一个字符时,将读取该行,并再次开始循环,等待下一行。 \“最后一行\”与其他行之间没有区别。 为了停止循环,您必须在某个地方手动关闭连接或等待超时。但是,如果没有有关您的通信协议的更多信息,就不可能对此做得更精确。     
这取决于协议。如果服务器没有关闭流,readLine将阻塞,直到收到正确的行尾为止。因此,如果服务器从不发送正确的行尾,则您将被阻止。您可能应该使用更多的低层方法,并尝试获取协议文档或对其进行反向工程。     
确保服务器代码具有out.println()而不是out.print()     
如果不使用空行,则可以扩展while条件:
while((line = br.readLine())!=null && line.length() > 0) {
   // ...
}
    

要回复问题请先登录注册