0

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

我正在编写一个客户端-服务器程序,在该程序中,一旦服务器将其发送为空,客户端就会终止。有问题的循环是:

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

输出是:

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

服务器null在发送 hi 之后和调用close()客户端之前向客户端发送一个。我可能应该在前面提到这一点,但我在 java.net 中使用了 Socket 和 ServerSocket 类。但是为什么 while 循环运行两次,即使在 message 是时也进入null

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

4

1 回答 1

1

字符串"null"值不同null。该值nullreadline()没有更多数据的地方返回。

根据 Java 文档,readline返回:

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

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

于 2013-02-10T10:41:02.597 回答