在Java中,处理Socket编程的并发连接主要依赖于多线程。每当客户端与服务器建立一个新的连接时,服务器可以为每个连接创建一个新的线程来处理客户端的请求。这样,服务器就可以同时处理多个客户端的并发连接。
以下是一个简单的Java Socket服务器示例,演示如何处理并发连接:
import java.io.*; import java.net.*; public class ConcurrentServer { public static void main(String[] args) throws IOException { int port = 12345; ServerSocket serverSocket = new ServerSocket(port); System.out.println("Server started on port " + port); while (true) { // 接受客户端连接 Socket clientSocket = serverSocket.accept(); System.out.println("New client connected"); // 为每个客户端连接创建一个新线程 Thread clientThread = new Thread(new ClientHandler(clientSocket)); clientThread.start(); } } } class ClientHandler implements Runnable { private Socket clientSocket; public ClientHandler(Socket socket) { this.clientSocket = socket; } @Override public void run() { try { // 读取客户端发送的数据 BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println("Received from client: " + inputLine); // 向客户端发送响应 PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); out.println("Server response: " + inputLine); } // 关闭资源 in.close(); out.close(); clientSocket.close(); } catch (IOException e) { System.out.println("Error handling client connection: " + e.getMessage()); } } }
在这个示例中,服务器监听12345端口上的客户端连接。当客户端连接到服务器时,服务器会为每个连接创建一个新的ClientHandler
线程来处理客户端的请求。ClientHandler
线程负责读取客户端发送的数据,并向客户端发送响应。这样,服务器就可以同时处理多个客户端的并发连接。