[英]How to send message from server to client
我正在嘗試用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);
這樣,每次調用println
, printf
或format
,PrintWriter都會在最后執行緩沖區刷新。
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
這條線總是在等待客戶端的output
,而且您的客戶端也不向server
發送消息。
注意:您的server
和client
均未讀取用戶輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.