我有一個簡單的回聲服務器,我想當連接用戶輸入任何東西到服務器,所有其他客戶端和該客戶端將得到消息+「| MOD」。Java TCP Echo服務器 - 廣播
它現在不會發送給所有的客戶端,但它應該和我只是不知道我的代碼有什麼問題,所以現在它只會發送消息+「| MOD」給發送消息的客戶端,而不是所有其他人也應該如此。
我只是不明白,我有一個循環遍歷所有的客戶,但它仍然不會發送給所有。
SERVER:
package com.murplyx.server;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
public static ServerSocket server;
public static ArrayList<Socket> clients = new ArrayList<Socket>();
public static void broadcast(String message) {
try {
for (Socket socket : clients) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(message);
}
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
try {
server = new ServerSocket(9000);
while (true) {
clients.add(server.accept());
for (Socket socket : clients) {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = in.readLine();
if (line != null) {
broadcast(line + " | MOD");
}
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
客戶:
package com.murplyx.client;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String args[]) {
try {
while (true) {
Socket socket = new Socket("localhost", 9000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
out.println(input.readLine());
System.out.println(in.readLine());
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
請幫助。
非常感謝。
在'Server.broadcast()',你應該在每次迭代結束時用'out.close()'關閉'PrintWriter'。 – colti
如果我沒有記錯,關閉PrintWriter將關閉底層套接字;如果您需要不止一次播放,我不會關閉它。 – Aify