2017-06-03 5 views
0

クライアントがメッセージを送信すると、サーバーはメッセージを受信して​​メッセージに応答します。私はなぜクライアントが応答を読むことができないのかわかりません。クライアントで読み込み部分を削除すると、サーバーはメッセージを取得できます。しかし、次のコードでは、何も動作しません。また、flush()を試しましたが、まだ動作しません。サーバーのクライアントJavaソケットでクライアントがデータを読み取ることができない

public void run() { 

    try (Socket echoSocket = new Socket(HOSTNAME, Integer.parseInt(PORTNUMBER)); 
      DataOutputStream dOut = new DataOutputStream(echoSocket.getOutputStream()); 
      DataInputStream dIn = new DataInputStream(echoSocket.getInputStream()); 
    ) { 

     while (true) { 


      command = UI.commandQueue.take() 
      dOut.writeInt(Message.toByteArray(command).length); 
      dOut.write(Message.toByteArray(command)); 


      int length; 
      while((length = dIn.readInt()) != 0) { 
      if (length > 0){ 
       byte[] messagebyte = new byte[length]; 
       dIn.readFully(messagebyte, 0, messagebyte.length); 
       try { 
        msg = Message.fromByteArray(messagebyte); 
        testDisplay(msg); 
       } catch (Exception e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       testDisplay(msg); 
      } 
      } 


     } 

    }catch (UnknownHostException e) { 
     UI.display("Don't know about host " + HOSTNAME); 
    } catch (IOException e) { 
     UI.display("Couldn't get I/O for the connection to " + HOSTNAME); 
    } 
} 

については

public void run() { 

    try (ServerSocket serverSocket = new ServerSocket(Integer.parseInt(PORT_NUMBER)); 
      Socket clientSocket = serverSocket.accept(); 

      DataOutputStream dOut = new DataOutputStream(clientSocket.getOutputStream()); 
      DataInputStream dIn = new DataInputStream(clientSocket.getInputStream());) { 
     int length; 
     while ((length = dIn.readInt()) != 0) { 
      if (length > 0) { 
       byte[] messagebyte = new byte[length]; 
       dIn.readFully(messagebyte, 0, messagebyte.length); // read the 
                   // message 
       Message msg; 
       try { 
        msg = Message.fromByteArray(messagebyte); 
        testDisplay(msg); 
        dOut.writeInt(Message.toByteArray(msg).length); 
        dOut.write(Message.toByteArray(msg)); 
        UI.display("ack sent"); 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        UI.display(e.getMessage()); 
       } 

      } 
      } 
    } catch (IOException e) { 
     UI.display(
       "Exception caught when trying to listen on port " + PORT_NUMBER + " or listening for a connection"); 
     UI.display(e.getMessage()); 
    } 

} 
+0

複数のクライアントから継続的にデータを送受信するにはサーバーが必要ですか?私はあなたのコードに多くの間違いを見ることができ、私はあなたに解決策がありますが、まずあなたのフィードバックを得る必要があります。 –

答えて

0

サーバーは、要求ごとに応答をエコーされますが、あなたのクライアントはそれを得ることはありませんリクエストごとに複数の応答を、読みしようとしています、それはブロックする。

関連する問題