我正在使用 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”的最后一个字符时,将读取该行并再次开始循环,等待下一行。
“最后一行”和其他行没有区别。
为了停止循环,你必须在某处手动关闭连接或者等待超时。但是,如果没有关于您的通信协议(protocol)的更多信息,就不可能对此更加精确。
关于java - 套接字:BufferedReader readLine() block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6139834/