当使用 readLine() 接收数据时,即使我在消息末尾放置了一个“\n” 在发送消息时使用 .flush,读取我的消息的 while 循环仍然阻塞。 只有在关闭套接字连接时,它才离开循环。
这是客户端代码:
bos = new BufferedOutputStream(socket.
getOutputStream());
bis = new BufferedInputStream(socket.
getInputStream());
osw = new OutputStreamWriter(bos, "UTF-8");
osw.write(REG_CMD + "\n");
osw.flush();
isr = new InputStreamReader(bis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String response = "";
String line;
while((line = br.readLine()) != null){
response += line;
}
和服务器的代码:
BufferedInputStream is;
BufferedOutputStream os;
is = new BufferedInputStream(connection.getInputStream());
os = new BufferedOutputStream(connection.getOutputStream());
isr = new InputStreamReader(is);
String query= "";
String line;
while((line = br.readLine()) != null){
query+= line;
}
String response = executeMyQuery(query);
osw = new OutputStreamWriter(os, "UTF-8");
osw.write(returnCode + "\n");
osw.flush();
我的代码在服务器 while 循环中阻塞。 谢谢。
最佳答案
BufferedReader 将继续读取输入,直到它到达末尾(文件或流或源等的末尾)。在这种情况下,“结束”是套接字的关闭。因此,只要 Socket 连接打开,您的循环就会运行,而 BufferedReader 只会等待更多输入,每次到达 '\n' 时都会循环。
关于java - BufferedReader readLine() block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15521352/