// 連接服務器
Socket socket = new Socket(serverIP, serverPort);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream());
// 接收消息線程
new Thread(() -> {
String msg;
while ((msg = reader.readLine()) != null) {
textArea.append(msg + "\n");
}
}).start();
// 發送消息
writer.println(nickname + ":" + content);
writer.flush();
ServerSocket server = new ServerSocket(port);
List<PrintWriter> clients = new ArrayList<>();
while (true) {
Socket client = server.accept();
PrintWriter writer = new PrintWriter(client.getOutputStream());
clients.add(writer);
new Thread(new ClientHandler(client, clients)).start();
}
// 廣播消息
void broadcast(String msg) {
for (PrintWriter w : clients) {
w.println(msg);
w.flush();
}
}
class ClientHandler implements Runnable {
private BufferedReader reader;
private List<PrintWriter> allWriters;
public void run() {
String msg;
while ((msg = reader.readLine()) != null) {
broadcast(msg); // 轉發給所有客戶端
}
}
}
客戶端/服務端均包含:連接區、消息顯示區(JScrollPane+JTextArea)、輸入區、昵稱設置。