2016-09-07 79 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

相关问题