1

サーバーとクライアントを作成しています。現在、 から にメッセージを送信でき、ClientServerThreadメッセージServerThreadを取得できます。しかし、ServerThreadが応答を返そうとすると、Clientは応答を受け取りませんが、メッセージは送信されました。応答を待っているようですが、受信できません。

サーバースレッド:

public class ServerThread extends Thread {
   private Socket socket;
   private DataOutputStream outToClient;
   private BufferedReader inFromClient;

   public ServerThread(Socket socket) {
      try {
         System.out.println("Thread started");
         this.socket = socket;
         outToClient = new DataOutputStream(socket.getOutputStream());
         inFromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   public void run() {
      System.out.println("Thread running");
      try {
         System.out.println("ServerThread: " + inFromClient.readLine());
         outToClient.writeBytes("I Can help you");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

サーバ:

public class Server {
   public static final int PORT = 5589;

   public static void main(String[] args) {
      ServerSocket socket;

      try {
         socket = new ServerSocket(5589);

         while (true)
            new ServerThread(socket.accept()).start();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

クライアント:

public class Client {
   public static void main(String args[]) throws Exception {
      Socket socket = new Socket("localhost", App.PORT);
      BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      PrintWriter outToServer = new PrintWriter(socket.getOutputStream(), true);

      outToServer.println("Hello, I'm Lost");

      System.out.println(inFromServer.readLine()); //Hangs on this line

      socket.close();
   }
}
4

1 に答える 1

3

データはサーバー側でバッファリングされ、バッファがいっぱいになるまで自動的に送信されません:バッファ サイズに達しない場合でも.flush()、サーバー側で.writeBytes()確実に送信されるようにする必要があります (これは両方に依存します)。 OS およびソケット構成)。

于 2012-12-25T00:22:09.830 に答える