溫馨提示×

java socket編程如何處理并發(fā)連接

小樊
83
2024-10-12 17:39:19
欄目: 編程語言

在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ā)連接。

0