阅读量:0
在Java中搭建一个简单的聊天室,你可以使用套接字编程(Socket Programming)和多线程。以下是一个基本的聊天室实现步骤:
- 创建服务器端(Server)代码:
import java.io.*; import java.net.*; public class ChatServer { private int port; private ServerSocket serverSocket; private Socket socket; public ChatServer(int port) throws IOException { this.port = port; serverSocket = new ServerSocket(port); } public void start() throws IOException { System.out.println("服务器启动,等待客户端连接..."); socket = serverSocket.accept(); System.out.println("客户端已连接:" + socket.getInetAddress()); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); String message; while ((message = in.readLine()) != null) { System.out.println("收到消息:" + message); broadcast(message, socket); } } private void broadcast(String message, Socket sender) { for (Socket client : clients) { if (client != sender) { try { PrintWriter out = new PrintWriter(client.getOutputStream(), true); out.println(message); } catch (IOException e) { e.printStackTrace(); client.close(); removeClient(client); } } } } private void removeClient(Socket client) { clients.remove(client); } public static void main(String[] args) { int port = 12345; ChatServer server; try { server = new ChatServer(port); server.start(); } catch (IOException e) { e.printStackTrace(); } } }
- 创建客户端(Client)代码:
import java.io.*; import java.net.*; public class ChatClient { private String serverAddress; private int port; private Socket socket; private BufferedReader in; private PrintWriter out; public ChatClient(String serverAddress, int port) throws IOException { this.serverAddress = serverAddress; this.port = port; socket = new Socket(serverAddress, port); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); } public void sendMessage(String message) { out.println(message); } public void receiveMessage() { try { String message = in.readLine(); System.out.println("收到消息:" + message); } catch (IOException e) { e.printStackTrace(); removeClient(); } } public void removeClient() { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String serverAddress = "localhost"; int port = 12345; ChatClient client; try { client = new ChatClient(serverAddress, port); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String message; while ((message = in.readLine()) != null) { client.sendMessage(message); client.receiveMessage(); } } catch (IOException e) { e.printStackTrace(); } } }
- 运行服务器端和客户端代码:
首先运行ChatServer
类,然后运行ChatClient
类。现在你可以尝试在客户端发送消息,服务器端会收到并广播给所有连接的客户端。
注意:这个示例仅适用于一个简单的聊天室,没有实现用户身份验证、私聊功能等高级功能。你可以根据自己的需求对代码进行修改和扩展。