为什么这个while循环在java中运行?

时间:2013-02-10 10:39:19

标签: java networking while-loop

更新:我是个白痴。服务器有一行out.println((String) null);,客户端用来知道何时停止和断开连接。原来这条线是不必要的,可能“null”来自哪里(我不知道怎么变成了一个字符串,但是......)但是谢谢大家的帮助!

我正在编写一个客户端 - 服务器程序,其中客户端在服务器将其发送为null后立即终止。有问题的循环是:

while ((message = in.readLine()) != null) {
    System.out.println("C: Recieved " + message + " from server");
}

输出结果为:

C: Recieved Hi from server
C: Recieved null from server

服务器在发送hi之后并在客户端上调用null之前向客户端发送close()。我可能早就应该提到这个,但我在java.net中使用了Socket和ServerSocket类。但是为什么while循环运行两次,即使消息是null

也要输入

编辑:服务器发送空值的行是out.println((String) null);。这会转换为字符串“null”吗?

1 个答案:

答案 0 :(得分:1)

字符串 "null"与值null不同。 null返回值readline(),其中没有更多数据。

根据Java文档,readline返回:

  

包含行内容的字符串,不包括任何行终止字符;如果已到达流的末尾,则为null。

如果您的服务器正在发送字符串"null",那实际上是非空数据。