0

更新:私はばかです。サーバーにはout.println((String) null);、クライアントがいつ停止して切断するかを知るために使用する行があります。その行は不要であり、おそらく「null」がどこから来たのかがわかりました (tat がどのように文字列に変わったのかはわかりませんが...) しかし、ご協力いただきありがとうございます!

サーバーがnullを送信するとすぐにクライアントが終了するクライアントサーバープログラムを作成しています。問題のループは次のとおりです。

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 を送信した後、クライアントを呼び出す前に、クライアントにa を送信close()します。これについてはおそらく前に言及する必要がありましたが、java.net でクラス Socket および ServerSocket を使用しています。しかし、while ループが 2 回実行され、メッセージが の場合でも入力されるのはnullなぜですか?

編集: サーバーが null を送信する行はout.println((String) null);. それは文字列「null」に変換されますか?

4

1 に答える 1

1

文字列 "null"は値と同じではありませんnull。これ以上データがない場合は、値nullが返されます。readline()

Java docs に従って、次をreadline返します。

行終了文字を含まない、行の内容を含む文字列、またはストリームの末尾に到達した場合は null。

サーバーが string を送信している場合"null"、それは実際には null 以外のデータです。

于 2013-02-10T10:41:02.597 に答える