在 Java 中,实现多线程的 Socket 服务器是一种常见的场景。这样的服务器可以同时处理多个客户端连接,避免阻塞,提高并发性能。下面我将为你提供一个简单的示例,展示如何创建一个基本的多线程 Socket 服务器。
首先,让我们创建一个多线程的服务器端程序,它会监听指定的端口,并为每个客户端连接启动一个新的线程来处理通信。以下是一个示例代码:
Java
import java.io.*; import java.net.*; public class MultiThreadedServer { public static void main(String[] args) { int port = 9876; // 服务器监听的端口号 try (ServerSocket serverSocket = new ServerSocket(port)) { System.out.println("服务器正在监听端口 " + port); // 使用线程池创建多个线程 ExecutorService executorService = Executors.newCachedThreadPool(); while (true) { Socket socket = serverSocket.accept(); // 等待客户端连接 System.out.println("新客户端已连接:" + socket.getInetAddress()); // 创建一个新线程来处理该客户端连接 executorService.execute(new ClientHandler(socket)); } } catch (IOException e) { e.printStackTrace(); } } } class ClientHandler implements Runnable { private Socket socket; public ClientHandler(Socket socket) { this.socket = socket; } @Override public void run() { try { BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); writer.println("欢迎使用服务器!"); String message; while ((message = reader.readLine()) != null) { if (message.equalsIgnoreCase("exit")) { writer.println("服务器断开连接,结束服务!"); break; } writer.println("收到消息:" + message); } reader.close(); writer.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
在这个示例中,我们使用了线程池来管理和复用线程。每当有新的客户端连接时,就会创建一个新的 ClientHandler
线程来处理通信。你可以根据自己的需求扩展这些代码,添加更复杂的业务逻辑。