要实现聊天功能,可以使用Java中的Socket编程和多线程技术。
首先,需要创建一个服务器端和多个客户端。服务器端负责接收和转发客户端之间的消息,而客户端则负责发送和接收消息。
服务器端的代码示例:
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class ChatServer { private Listclients = new ArrayList<>(); public static void main(String[] args) { ChatServer server = new ChatServer(); server.start(9999); } public void start(int port) { try { ServerSocket serverSocket = new ServerSocket(port); System.out.println("服务器已启动,监听端口:" + port); while (true) { Socket socket = serverSocket.accept(); System.out.println("客户端已连接:" + socket.getInetAddress()); ClientHandler clientHandler = new ClientHandler(socket); clients.add(clientHandler); new Thread(clientHandler).start(); } } catch (IOException e) { e.printStackTrace(); } } public synchronized void broadcast(String message) { for (ClientHandler handler : clients) { handler.sendMessage(message); } } private class ClientHandler implements Runnable { private Socket socket; private PrintWriter writer; public ClientHandler(Socket socket) { this.socket = socket; try { writer = new PrintWriter(socket.getOutputStream(), true); } catch (IOException e) { e.printStackTrace(); } } public void run() { try { BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String message; while ((message = reader.readLine()) != null) { System.out.println("接收到消息:" + message); broadcast(message); } } catch (IOException e) { e.printStackTrace(); } finally { try { writer.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } public void sendMessage(String message) { writer.println(message); } } }
客户端的代码示例:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class ChatClient { private Socket socket; private BufferedReader reader; private PrintWriter writer; public static void main(String[] args) { ChatClient client = new ChatClient(); client.connect("localhost", 9999); } public void connect(String host, int port) { try { socket = new Socket(host, port); System.out.println("已连接到服务器:" + socket.getInetAddress()); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream(), true); new Thread(new ServerHandler()).start(); new Thread(new ClientHandler()).start(); } catch (IOException e) { e.printStackTrace(); } } private class ServerHandler implements Runnable { public void run() { try { String message; while ((message = reader.readLine()) != null) { System.out.println("收到消息:" + message); } } catch (IOException e) { e.printStackTrace(); } finally { try { reader.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } private class ClientHandler implements Runnable { public void run() { try { BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in)); String message; while ((message = consoleReader.readLine()) != null) { writer.println(message); } } catch (IOException e) { e.printStackTrace(); } finally { writer.close(); } } } }
以上代码演示了一个基本的聊天功能,服务器端接收到客户端发送的消息后,再将消息广播给所有客户端。客户端可以通过控制台输入消息,并接收服务器端广播的消息。
注意:为了简化代码,没有进行异常处理和线程安全的处理。在实际开发中,需要根据具体需求进行相应的优化和改进。