我不知道while循环体判断语句br.readLine() ! = null; 什么时候会不满足,到达br.close();
public void run() {
sockedOut("你已经连接到本服务器了");
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(
socket.getInputStream(),"UTF-8"));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
ChatManager.getChatManager().publish(this, line);
}
br.close();
System.out.println("A方式,断开了一个客户端链接");
ChatManager.getChatManager().remove(this);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
System.out.println("B方式,断开了一个客户端链接");
ChatManager.getChatManager().remove(this);
e.printStackTrace();
}
}
我试过,只有当把客户端关闭后,上述循环体出错,进入到catch (IOException e) ,然后跳出run().
始终没有发现什么状态下会正常进行到 br.close();
while ((line = br.readLine()) != null) {
System.out.println(line);
ChatManager.getChatManager().publish(this, line);
}
br.close();
5 个解决方案
#1
按理说,BufferedReader 类的readLine()方法,为读取一行文本,若无数据可读则返回 null。
而我在客户端,不发送数据时,这上面的服务器端
语句 while ((line = br.readLine()) != null) 是不是不满足啦,应该跳出while( ){ } 的啊。
为什么总是满足( ( line = br.readLine() ) != null ),到不了br.close()?
while ((line = br.readLine()) != null) {
//这里是处理语句
}
//readLine() = null时
br.close();
而我在客户端,不发送数据时,这上面的服务器端
语句 while ((line = br.readLine()) != null) 是不是不满足啦,应该跳出while( ){ } 的啊。
为什么总是满足( ( line = br.readLine() ) != null ),到不了br.close()?
while ((line = br.readLine()) != null) {
//这里是处理语句
}
//readLine() = null时
br.close();
#2
是不是只有 消除了套接字 socked后,接“等效成读取、关闭文件”后,才会有 “ br.readLine() == null;” 成立?
真的不懂这个BufferReader在socked中的含义。
真的不懂这个BufferReader在socked中的含义。
#3
具体为啥没测试过,提供一些思路:socket通信中服务器要想知道什么时候接收结束一般两个方法:加特殊标志符号、提前告知传输数据长度。
#4
我是想知道为什么在新线程的run()方法中,while ((line = br.readLine()) != null) {
//这里是处理语句
}会一直循环。
//这里是处理语句
}会一直循环。
#5
有可能阻塞了,http://blog.csdn.net/fw0124/article/details/41227543
#1
按理说,BufferedReader 类的readLine()方法,为读取一行文本,若无数据可读则返回 null。
而我在客户端,不发送数据时,这上面的服务器端
语句 while ((line = br.readLine()) != null) 是不是不满足啦,应该跳出while( ){ } 的啊。
为什么总是满足( ( line = br.readLine() ) != null ),到不了br.close()?
while ((line = br.readLine()) != null) {
//这里是处理语句
}
//readLine() = null时
br.close();
而我在客户端,不发送数据时,这上面的服务器端
语句 while ((line = br.readLine()) != null) 是不是不满足啦,应该跳出while( ){ } 的啊。
为什么总是满足( ( line = br.readLine() ) != null ),到不了br.close()?
while ((line = br.readLine()) != null) {
//这里是处理语句
}
//readLine() = null时
br.close();
#2
是不是只有 消除了套接字 socked后,接“等效成读取、关闭文件”后,才会有 “ br.readLine() == null;” 成立?
真的不懂这个BufferReader在socked中的含义。
真的不懂这个BufferReader在socked中的含义。
#3
具体为啥没测试过,提供一些思路:socket通信中服务器要想知道什么时候接收结束一般两个方法:加特殊标志符号、提前告知传输数据长度。
#4
我是想知道为什么在新线程的run()方法中,while ((line = br.readLine()) != null) {
//这里是处理语句
}会一直循环。
//这里是处理语句
}会一直循环。
#5
有可能阻塞了,http://blog.csdn.net/fw0124/article/details/41227543