【java se socket编程】服务端线程不停执行br.readLine()
代码与问题内容具体在此网址中:http://bbs.csdn.net/topics/391856865...
代码与问题内容具体在此网址中:
http://bbs.csdn.net/topics/391856865 展开
http://bbs.csdn.net/topics/391856865 展开
2个回答
展开全部
// 因为读到了流末尾,所以不停的返回null,不会停止。run部分的代码可以改为
public void run() {
while (true) {
try {
String str;
while ((str = br.readLine()) != null)
System.out.println(name + ":" + str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
更多追问追答
追问
复制了再试一次,还是一直null..不过这次是name变成null了。
追答
有网友帮你指出了不要随意关闭连接的错误,我看得不是很仔细。
2015-11-11
展开全部
//Server.java
//name = br.readLine();
// 首先得判断读取为非空
if ((name = br.readLine()) != null) {
name += "[" + s.getInetAddress().getHostAddress() + "]";
System.out.println(name + " Connected ");
}
// 这里也一样得判断
public void run() {
while (true) {
try {
String str;
if ((str = br.readLine()) != null) {
System.out.println(name + " : " + str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 另 在 Client 类 的 connect() 里不要关闭了连接
// 否则你在send里面是没法继续发送消息了
更多追问追答
追问
上面一段代码是判断name是否为空是吧? 可是name并不是null;而是客户端还没来得及out.println()服务端就readLine()了;这是有问题的。你这个我试了跟之前没啥两样。
追答
我试过了 server端正常打印了第一个
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询