java创建一个聊天室
时间: 2023-06-20 15:10:42 浏览: 44
Java创建一个聊天室可以通过使用Socket和ServerSocket来实现。下面是一个简单的示例代码:
服务端代码:
```java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("Server started. Waiting for clients to connect...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Client connected: " + socket.getInetAddress().getHostAddress());
Thread thread = new Thread(new ClientHandler(socket));
thread.start();
}
}
}
class ClientHandler implements Runnable {
private Socket socket;
private BufferedReader reader;
private PrintWriter writer;
public ClientHandler(Socket socket) throws IOException {
this.socket = socket;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
}
@Override
public void run() {
try {
String message;
while ((message = reader.readLine()) != null) {
System.out.println("Received message from client " + socket.getInetAddress().getHostAddress() + ": " + message);
// Broadcast the message to all connected clients
for (ClientHandler clientHandler : ServerMain.clientHandlers) {
if (clientHandler != this) {
clientHandler.sendMessage(message);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void sendMessage(String message) {
writer.println(message);
}
}
```
客户端代码:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 9999);
System.out.println("Connected to server.");
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// Start a new thread to receive messages from the server
Thread thread = new Thread(new ServerListener(reader));
thread.start();
// Read input from the user and send it to the server
BufferedReader userInputReader = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = userInputReader.readLine()) != null) {
writer.println(userInput);
}
}
}
class ServerListener implements Runnable {
private BufferedReader reader;
public ServerListener(BufferedReader reader) {
this.reader = reader;
}
@Override
public void run() {
try {
String message;
while ((message = reader.readLine()) != null) {
System.out.println("Received message from server: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
运行上面的代码后,可以在控制台中输入消息,并且客户端和服务端之间可以相互发送消息。注意在代码中还需要实现多个客户端之间的消息广播,可以通过维护一个客户端处理器列表来实现。