java聊天室多人 代码
时间: 2023-07-30 14:08:29 浏览: 55
下面是一个简单的Java多人聊天室的代码示例:
Server.java:
```java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
private ServerSocket serverSocket;
private List<ClientHandler> clients = new ArrayList<>();
public void start(int port) {
try {
serverSocket = new ServerSocket(port);
System.out.println("Server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected");
ClientHandler clientHandler = new ClientHandler(clientSocket, this);
clients.add(clientHandler);
clientHandler.start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
stop();
}
}
public void broadcastMessage(String message, ClientHandler sender) {
for (ClientHandler client : clients) {
if (client != sender) {
client.sendMessage(message);
}
}
}
public void removeClient(ClientHandler client) {
clients.remove(client);
}
public void stop() {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Server server = new Server();
server.start(5000);
}
}
```
ClientHandler.java:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ClientHandler extends Thread {
private Socket clientSocket;
private Server server;
private PrintWriter writer;
public ClientHandler(Socket socket, Server server) {
this.clientSocket = socket;
this.server = server;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
writer = new PrintWriter(clientSocket.getOutputStream(), true);
String message;
while ((message = reader.readLine()) != null) {
System.out.println("Received message from client: " + message);
server.broadcastMessage(message, this);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
server.removeClient(this);
try {
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void sendMessage(String message) {
writer.println(message);
}
}
```
Client.java:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
private Socket clientSocket;
private PrintWriter writer;
public void start(String address, int port) {
try {
clientSocket = new Socket(address, port);
System.out.println("Connected to server");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
writer = new PrintWriter(clientSocket.getOutputStream(), true);
new Thread(new Receiver(clientSocket)).start();
String message;
while ((message = reader.readLine()) != null) {
writer.println(message);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
stop();
}
}
public void stop() {
try {
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Client client = new Client();
client.start("localhost", 5000);
}
private static class Receiver implements Runnable {
private Socket socket;
public Receiver(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message;
while ((message = reader.readLine()) != null) {
System.out.println("Received message from server: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
这是一个简单的多人聊天室的示例,使用了基于Socket的网络编程。Server类负责监听客户端连接并转发消息,ClientHandler类负责处理每个客户端的消息接收和发送,Client类负责与服务器建立连接,并处理用户输入和接收服务器的消息。可以根据需要进行扩展和改进。请注意,这只是一个基本示例,实际应用中还需要考虑异常处理、线程安全等问题。