在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
線程負責讀取客戶端發送的數據,并向客戶端發送響應。這樣,服務器就可以同時處理多個客戶端的并發連接。