在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
线程负责读取客户端发送的数据,并向客户端发送响应。这样,服务器就可以同时处理多个客户端的并发连接。