2012-02-11 6 views
3

次のコードは、クライアント側のコードで、サーバーからテキストを取得して印刷します。JavaのInputstreamの終了を取得するには

Socket socket = new Socket(ip, port); 
     InputStream in = socket.getInputStream(); 
     OutputStream out = socket.getOutputStream(); 
     String string = "Hello!\n"; 
     byte buffer[] = string.getBytes(); 
     out.write(buffer); 


    while ((character = in.read()) != -1){ 
      System.out.print((char) character); 
     } 

どのように私は、送信された値の長さを知ることができ、私は、サーバーから正しい値を取得していますが、それは何度も何度も起きています。

+0

何が何度も繰り返されていますか? –

答えて

4

-1は、ストリームの終わりを示し、接続が閉じられると受信されます。接続を開いたままにして複数のメッセージを送信したい場合は、メッセージの終わりを知らせる何らかのプロトコル(両端のようなもの)が必要です。これを行うには多くの方法がありますが、あなたの例では、メッセージの最後に行終端文字(\n)を書いているので、もう一方の終端でそれを確認することができます。別の方法は、実際のメッセージの内容の前に送信しようとしているバイト量を書き込むことです。

関連する問題