2016-09-25 11 views
0

文字列をサーバーに送信する単純なクラスを作成しました。どちらもJava Sockets APIを使用して通信します。サーバーは、クライアントが送信した内容を読み取り、別の文字列で応答します。しかし、クライアントはその応答を読み取ることができません。 Java Sockets APIを使用してサーバー応答を読み取る

この

は、クライアントクラスです:

import java.io.IOException; 
import java.net.Socket; 

public class Client { 

    public static void main(String[] args) throws IOException { 
     Socket socket = new Socket("localhost", 8181); 
     socket.getOutputStream().write("Hello".getBytes()); 

     int read; 
     while ((read = socket.getInputStream().read()) > -1) { 
      System.out.print((char) read); 
     } 

     socket.close(); 
    } 

} 

そして、これは、サーバ・クラスである:私は私が知っている `tをため、問題は、クライアントの実行フローであってもよいことを想像

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class Server { 

    public static void main(String[] args) throws IOException { 
     ServerSocket serverSocket = new ServerSocket(8181); 

     while (true) { 
      Socket socket = serverSocket.accept(); 
      int read; 
      while ((read = socket.getInputStream().read()) > -1) { 
       System.out.print((char) read); 
      } 

      socket.getOutputStream().write("Hi!".getBytes()); 
     } 

    } 

} 

どうすればサーバーの応答を待つことができますか?つまり、サーバーの応答を読み取ることができるクライアントを実装する方法は?

答えて

1
  1. あなたはソケットを閉じていません。
  2. サーバーはストリームの終わりまで読み取りを試みてから、応答を送信します。ストリーム終了は、ピアが接続を閉じるときにのみ発生するため、修正した後でも応答を送信することはできません(1)。あなたは、アプリケーションプロトコルで何を意味するものであれ、メッセージを読む必要があります。
+0

これは間違いなく、 'while((read = socket.getInputStream()。read())> -1)'サーバーは、クライアントが接続を閉じるまで待機します。 –

0

出力ストリームをフラッシュまたは閉じる必要があります。

関連する問題