【java se socket编程】服务端线程不停执行br.readLine()

代码与问题内容具体在此网址中:http://bbs.csdn.net/topics/391856865... 代码与问题内容具体在此网址中:

http://bbs.csdn.net/topics/391856865
展开
 我来答
百度网友0ed34d7
2015-11-10 · 超过23用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:42.9万
展开全部
// 因为读到了流末尾,所以不停的返回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端正常打印了第一个
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式