MST

星途 面试题库

面试题:Java中使用ServerSocket创建服务器时如何处理多客户端连接

在Java里,当使用ServerSocket创建服务器,要实现能够同时处理多个客户端连接,简述实现思路并给出关键代码片段。
12.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 创建 ServerSocket 对象,绑定到指定端口。
  2. 使用一个循环不断调用 accept() 方法来接受客户端连接。
  3. 每当接受一个客户端连接,就创建一个新的线程来处理该客户端的请求,这样可以实现并发处理多个客户端连接。

关键代码片段

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8080)) {
            System.out.println("Server started on port 8080");
            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("Client connected: " + clientSocket);
                // 为每个客户端连接创建一个新线程处理
                new Thread(new ClientHandler(clientSocket)).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class ClientHandler implements Runnable {
        private final Socket clientSocket;

        public ClientHandler(Socket clientSocket) {
            this.clientSocket = clientSocket;
        }

        @Override
        public void run() {
            try (Scanner in = new Scanner(clientSocket.getInputStream());
                 PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)) {
                while (in.hasNextLine()) {
                    String inputLine;
                    if ((inputLine = in.nextLine()) != null) {
                        System.out.println("Received from client: " + inputLine);
                        out.println("Server response: " + inputLine);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    clientSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}