2016-09-07 111 views
0

我正在嘗試編寫簡單服務器的代碼,該服務器接收來自客戶端的消息。連接成功,但是一旦服務器連接到客戶端,消息就不會顯示在屏幕上。在關閉客戶端的連接後,服務器一次接收所有消息。Java套接字服務器僅顯示連接關閉後收到的消息

我需要逐行接收消息,因爲每一行都需要單獨實時處理(我正在使用HMM進行驅動程序的動作識別)。

有人能告訴我我做錯了什麼嗎?

非常感謝您。

public static void main(String args[]) { 

    ServerSocket my_server = null; 
    String received_message; 
    DataOutputStream output = null; 
    Socket socket_connected = null; 

    try { 
     my_server = new ServerSocket(9090); 
    } 
    catch (IOException excepcion) { 
     System.out.println(excepcion); 
    } 
    try { 
     socket_connected = my_server.accept(); 
     BufferedReader entrada = null;  

     while (socket_connected.isConnected() == true){ 
      entrada = new BufferedReader(new InputStreamReader(socket_connected.getInputStream())); 
      output = new DataOutputStream(socket_connected.getOutputStream()); 
      System.out.println("Confirmando conexion al cliente....");   

      received_message = entrada.readLine(); 
      System.out.println(received_message); 
      entrada.close(); 
      output.close();   
     } 

     socket_connected.close(); 
    } 
    catch (IOException excepcion) { 
     System.out.println(excepcion); 
    } 
} 
+1

你知道'flush'方法嗎?您可以在套接字(客戶端或服務器端)寫入後使用它 –

回答

1

客戶端,你是否刷新你的輸出流?

當關閉連接時,所有剩餘的數據都被刷新,但在此之前,它們只有在有足夠的「等待」數據發送時纔會發生。

0

我設法找到一個解決方案,我想在這裏分享。

我的客戶端是一個Visual Basic應用程序,我有一個Java服務器。客戶端發送的消息沒有換行符,所以entrada.readLine();會在顯示消息之前等待消息已經結束的信號(從未發生過)。 解決的辦法是在客戶端消息的末尾添加一個End Of Line字符,並且最後所有的工作都很順利。

謝謝你的答案。

+0

因此,您正在讀取行,但未發送行。 – EJP

相關問題