请做一个功能俱全的Java的聊天室
以下是一个基本的Java聊天室的代码示例,具备基本的客户端和服务器功能。您可以根据自己的需求进行扩展和调整。
// ChatServer.java
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
private static final int PORT = 1234;
private static Set<PrintWriter> clientWriters = new HashSet<>();
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
System.out.println("Chat Server started on port " + PORT);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected: " + clientSocket);
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
clientWriters.add(writer);
Thread clientThread = new Thread(new ClientHandler(clientSocket, writer));
clientThread.start();
}
} catch (IOException e) {
System.out.println("Error in the server: " + e.getMessage());
e.printStackTrace();
}
}
public static void broadcastMessage(String message) {
for (PrintWriter writer : clientWriters) {
writer.println(message);
writer.flush();
}
}
private static class ClientHandler implements Runnable {
private Socket clientSocket;
private PrintWriter writer;
public ClientHandler(Socket clientSocket, PrintWriter writer) {
this.clientSocket = clientSocket;
this.writer = writer;
}
@Override
public void run() {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {
String message;
while ((message = reader.readLine()) != null) {
System.out.println("Received message: " + message);
broadcastMessage(message);
}
} catch (IOException e) {
System.out.println("Error handling client: " + e.getMessage());
e.printStackTrace();
} finally {
clientWriters.remove(writer);
}
}
}
}
// ChatClient.java
import java.io.*;
import java.net.*;
public class ChatClient {
private static final String SERVER_IP = "localhost";
private static final int SERVER_PORT = 1234;
public static void main(String[] args) {
try (Socket socket = new Socket(SERVER_IP, SERVER_PORT);
BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter serverWriter = new PrintWriter(socket.getOutputStream(), true);
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.println("Connected to the Chat Server.");
// Start a separate thread to handle server messages
Thread serverThread = new Thread(() -> {
String message;
try {
while ((message = serverReader.readLine()) != null) {
System.out.println("Received: " + message);
}
} catch (IOException e) {
System.out.println("Error reading from server: " + e.getMessage());
e.printStackTrace();
}
});
serverThread.start();
String userInput;
while ((userInput = consoleReader.readLine()) != null) {
serverWriter.println(userInput);
}
} catch (UnknownHostException e) {
System.out.println("Unknown host: " + SERVER_IP);
e.printStackTrace();
} catch (IOException e) {
System.out.println("Error connecting to server: " + e.getMessage());
e.printStackTrace();
}
}
}
这是一个简单的聊天室示例,服务器在端口1234上监听客户端连接。客户端可以通过ChatClient类连接到服务器并发送消息,服务器将收到的消息广播给所有连接的客户端。
请注意,此代码示例仅提供基本的功能,您可能需要根据自己的需求进行扩展。例如,您可以添加用户身份验证、私人消息功能等
原文地址: https://www.cveoy.top/t/topic/iyE3 著作权归作者所有。请勿转载和采集!