java实现多人聊天室
时间: 2023-10-11 18:11:53 浏览: 48
实现多人聊天室需要用到网络编程和多线程技术,下面是一个简单的Java多人聊天室实现示例:
服务端代码:
```java
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
private ServerSocket server;
private ArrayList<Socket> clients = new ArrayList<Socket>();
public ChatServer(int port) throws IOException {
server = new ServerSocket(port);
System.out.println("Server started on port " + port);
}
public void start() {
while (true) {
try {
Socket client = server.accept();
clients.add(client);
System.out.println("Client connected: " + client.getInetAddress().getHostName());
new Thread(new ClientHandler(client)).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void broadcast(String message) {
System.out.println("Broadcasting message: " + message);
for (Socket client : clients) {
try {
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
out.println(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class ClientHandler implements Runnable {
private Socket client;
private BufferedReader in;
public ClientHandler(Socket client) throws IOException {
this.client = client;
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
}
@Override
public void run() {
String message;
try {
while ((message = in.readLine()) != null) {
broadcast(message);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
clients.remove(client);
System.out.println("Client disconnected: " + client.getInetAddress().getHostName());
}
}
}
public static void main(String[] args) throws IOException {
ChatServer server = new ChatServer(5000);
server.start();
}
}
```
客户端代码:
```java
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class ChatClient {
public static void main(String[] args) {
try {
Socket server = new Socket("localhost", 5000);
System.out.println("Connected to server: " + server.getInetAddress().getHostName());
new Thread(new ServerHandler(server)).start();
PrintWriter out = new PrintWriter(server.getOutputStream(), true);
Scanner scanner = new Scanner(System.in);
String message;
while ((message = scanner.nextLine()) != null) {
out.println(message);
}
scanner.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static class ServerHandler implements Runnable {
private Socket server;
private BufferedReader in;
public ServerHandler(Socket server) throws IOException {
this.server = server;
in = new BufferedReader(new InputStreamReader(server.getInputStream()));
}
@Override
public void run() {
String message;
try {
while ((message = in.readLine()) != null) {
System.out.println(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
运行Server类开启服务端,运行Client类开启客户端即可实现多人聊天室。