gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:36 25 4
gpt4 key购买 nike

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

我看不出我做错了什么。

服务端代码:

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);

这样,每次调用printlnprintfformat时,PrintWriter都会在结束。

关于java - 如何从服务器向客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32113376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com