在Java中,處理Socket編程的并發(fā)連接主要依賴于多線程。每當(dāng)客戶端與服務(wù)器建立一個新的連接時,服務(wù)器可以為每個連接創(chuàng)建一個新的線程來處理客戶端的請求。這樣,服務(wù)器就可以同時處理多個客戶端的并發(fā)連接。
以下是一個簡單的Java Socket服務(wù)器示例,演示如何處理并發(fā)連接:
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");
// 為每個客戶端連接創(chuàng)建一個新線程
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 {
// 讀取客戶端發(fā)送的數(shù)據(jù)
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("Received from client: " + inputLine);
// 向客戶端發(fā)送響應(yīng)
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
out.println("Server response: " + inputLine);
}
// 關(guān)閉資源
in.close();
out.close();
clientSocket.close();
} catch (IOException e) {
System.out.println("Error handling client connection: " + e.getMessage());
}
}
}
在這個示例中,服務(wù)器監(jiān)聽12345端口上的客戶端連接。當(dāng)客戶端連接到服務(wù)器時,服務(wù)器會為每個連接創(chuàng)建一個新的ClientHandler
線程來處理客戶端的請求。ClientHandler
線程負責(zé)讀取客戶端發(fā)送的數(shù)據(jù),并向客戶端發(fā)送響應(yīng)。這樣,服務(wù)器就可以同時處理多個客戶端的并發(fā)連接。