如何从服务器向客户端发送消息

锡25

我正在尝试用Java编写一个chatprogram,当我在客户端发送消息时,服务器端会收到消息。但是,当我从服务器端发送到客户端时,它没有收到消息。

我看不到我在做什么错。

服务器端代码:

private void serverStart(){
    textArea.append("Starting server " + " \n");

    try {
        serverSocket = new ServerSocket(4444);
        textArea.append("Waiting for Clients " + " \n");

        //Reading message from the client
        socket = serverSocket.accept();

        textArea.append("Client Connected " + "\n");

        //Send message to client 
        out = new PrintWriter(socket.getOutputStream());
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        while (true)
        {        

            messageFromClient = in.readLine();
            whileChat(messageFromClient); 
        }
    } catch(IOException ioExecption) {
        ioExecption.printStackTrace();
    }
}

private void whileChat(String messageFromClient) {
    showMessage(messageFromClient);
    System.out.println("Message from client : " + messageFromClient);
}

protected static void showMessage(final String message) {
    SwingUtilities.invokeLater( 
    new Runnable(){
        public void run()
        {
            Gui.consoleTextArea.append(message + "\n");
        }
    });
}

public static void sendMessage(String message) {
    out.println(message);
    showMessage(name +  " : " + message + "\n");
}

客户端:

private void connectToServer() {

    try {
        socket = new Socket("localhost", 4444);
    } catch (UnknownHostException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    Thread clientThread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                // attach to socket's output stream with auto flush turned on
                //Send message to the server
                out = new PrintWriter(socket.getOutputStream(),
                        true);

                //Get return message from server
                in = new BufferedReader(new InputStreamReader(
                        socket.getInputStream()));
                messageFromServer = in.readLine();
                whileChatting(messageFromServer);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    clientThread.start();
}

private void whileChatting(String messageFromServer) {
    showMessage(messageFromServer);
    System.out.println("Message from server to client " + messageFromServer);
}

public static void Send(String msg) {
    out.println(name + " : " + msg);
    showMessage(name +  " : " + msg + "\n");
}
protected static void showMessage(final String message) {
    SwingUtilities.invokeLater( 
    new Runnable(){
        public void run(){
            Gui.consoleTextArea.append(message);
        }
    });
}

希望有人可以帮助我解决这个问题。

小桑蒂

您可以在每个println之后立即对PrintWriter执行刷新,甚至更好:使用autoFlush = true实例化PrintWriter:

out = new PrintWriter(socket.getOutputStream(), true);

这样,每次调用printlnprintf或时format,PrintWriter都会在最后执行缓冲区刷新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Vscode语言客户端扩展-如何从服务器向客户端发送消息?

从服务器向 websocket 客户端发送消息

服务器向客户端发送消息

向所有客户端发送消息(客户端-服务器通信)

如何从 Python 服务器向 Java 客户端发送消息

如何从Flask服务器(Python)向HTML客户端发送消息?

Spring Integration和TCP服务器套接字-如何向客户端发送消息?

在ASP.NET Core SignalR中,如何从服务器向客户端发送消息?

如何使用STOMP从Spring WebSocket服务器向WebSocket客户端发送消息?

Java如何使服务器向连接的每个客户端发送消息

如何使用Java RMI从服务器向客户端发送消息?

如何使用端口从服务器向客户端发送消息?

如何从Qt中的服务器向连接的客户端发送消息

如何从服务器向客户端发送更新?

如何使用Java中的套接字从服务器向特定客户端发送字符串消息?

Flask-SocketIO如何允许2个客户端依次向服务器发送消息?

运行龙卷风服务器时,如何每隔X秒向客户端发送消息?

MQTT服务器如何向客户端发送一条消息,告知其未经授权的连接?

两个客户端在java中向服务器发送消息

Thrift:向所有连接到服务器的客户端发送消息

无法通过Netty从服务器向客户端发送消息

从 NodeJS 服务器向 Web 客户端发送消息

使用Java Websockets客户端向服务器发送多条消息?

无法对允许向服务器发送文本消息的客户端进行编程

socket.io 客户端无法向服务器发送消息

从Android客户端向Java服务器发送消息

从服务器向所有客户端发送消息

如果客户端被强制销毁,则向服务器发送消息

从Node JS Socket客户端向MINA套接字服务器发送消息