用Java实现多人聊天室
时间: 2023-09-08 21:12:05 浏览: 39
实现多人聊天室需要用到网络编程。以下是一个简单的Java代码示例,可以实现多人聊天室功能:
```java
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
private static ArrayList<Socket> clients = new ArrayList<Socket>();
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("Chat server started on port 8888.");
while (true) {
Socket s = ss.accept();
clients.add(s);
System.out.println("New client connected: " + s.getInetAddress());
ChatHandler handler = new ChatHandler(s);
new Thread(handler).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void broadcast(String message) {
for (Socket s : clients) {
try {
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
out.println(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
static class ChatHandler implements Runnable {
private Socket client;
private BufferedReader in;
private PrintWriter out;
public ChatHandler(Socket socket) {
this.client = socket;
try {
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
String line;
try {
while ((line = in.readLine()) != null) {
System.out.println("Received message: " + line);
broadcast(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
out.close();
client.close();
clients.remove(client);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
```
这个聊天服务器使用了一个静态的 `ArrayList` 存储连接到服务器的客户端 `Socket` 对象,对于每个客户端 `Socket`,都创建一个 `ChatHandler` 线程用于处理客户端的消息。 `ChatHandler` 类实现了 `Runnable` 接口,用于在新线程中处理客户端消息。在 `ChatHandler` 类内部,使用 `BufferedReader` 读取客户端发送的消息,然后使用 `PrintWriter` 将消息广播给所有客户端。
要实现客户端程序,你可以使用 Java 的 `Socket` 类连接到服务器,然后使用 `BufferedReader` 和 `PrintWriter` 读取和发送消息。 以下是一个简单的客户端示例:
```java
import java.io.*;
import java.net.*;
public class ChatClient {
public static void main(String[] args) {
try {
Socket s = new Socket("localhost", 8888);
System.out.println("Connected to chat server.");
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = console.readLine()) != null) {
out.println(line);
System.out.println(in.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在客户端示例中,使用 `Socket` 类连接到服务器,然后使用 `BufferedReader` 和 `PrintWriter` 读取和发送消息。每当客户端发送一条消息时,都会立即从服务器接收广播消息。
注意:以上代码仅为示例,实际应用程序需要添加错误处理和其他功能。