Maj*_*jid 10 java sockets bufferedreader
当使用readLine()接收数据时,即使我在发送消息时使用.flush在消息末尾添加了"\n",但读取我的消息的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;
}
Run Code Online (Sandbox Code Playgroud)
和服务器的代码:
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();
Run Code Online (Sandbox Code Playgroud)
我的代码在循环时在服务器上阻塞.谢谢.
Sin*_*int 14
BufferedReader将继续读取输入,直到它到达结尾(文件末尾或流或源等).在这种情况下,'end'是套接字的关闭.因此,只要Socket连接打开,您的循环就会运行,BufferedReader将只等待更多输入,每次达到'\n'时循环.
我尝试了很多解决方案,但唯一没有阻止执行的是以下解决方案:
BufferedReader inStream = new BufferedReader(new InputStreamReader(yourInputStream));
String line;
while(inStream.ready() && (line = inStream.readLine()) != null) {
System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)
在inStream.ready()
返回false如果下次readLine()
调用将阻塞执行。
归档时间: |
|
查看次数: |
35367 次 |
最近记录: |