Java 套接字服务器只显示连接关闭后收到的消息

Posted

技术标签:

【中文标题】Java 套接字服务器只显示连接关闭后收到的消息【英文标题】:Java socket server only displays messages received after the connection closes 【发布时间】:2016-09-07 11:16:27 【问题描述】:

我正在尝试为一个简单的服务器编写代码,该服务器接收来自客户端的消息。连接成功,但是一旦服务器与客户端连接,消息就不会显示在屏幕上。我从客户端关闭连接后,服务器一次性接收所有消息。

我需要逐行接收消息,因为每一行都需要单独和实时地去处理(我正在使用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);
    
   

【问题讨论】:

你知道flush方法吗?您可以在写入套接字(客户端或服务器端)后使用它 【参考方案1】:

我设法找到了解决方案,我想在这里分享。

我的客户端是一个 Visual Basic 应用程序,我有一个 Java 服务器。客户端发送的消息没有行尾字符,因此 entrada.readLine();将在显示消息之前等待消息结束的信号(从未发生过)。 解决方案是在客户端消息的末尾添加一个行尾字符,最后一切都很好。

感谢您的回答。

【讨论】:

【参考方案2】:

客户端,你刷新你的输出流吗?

关闭连接时,所有剩余数据都会被刷新,但在此之前,只有在有足够的“等待”数据要发送时才会刷新。

【讨论】:

以上是关于Java 套接字服务器只显示连接关闭后收到的消息的主要内容,如果未能解决你的问题,请参考以下文章

zmq丢消息

收到服务器响应后如何关闭netcat连接?

使用 XMPP 关闭 GCM 连接服务器的套接字

WSA UDP 套接字无法重用,因为它强制关闭连接

在读取端收到关闭后需要帮助写入套接字

自服务以来,我使用一个套接字时收到多个消息