1

我想知道使用服务器套接字的简单服务器程序是否真的有可能同时处理多个客户端?我正在创建一个需要处理多个客户端的服务器程序。具有相同的端口号。但问题是程序一次只能服务一个客户端,为了服务另一个客户端,必须终止第一个连接。

这是代码:

try{

        ServerSocket server = new ServerSocket(PORT);
        System.out.println("Server Running...");
        while(true){
            Socket socket = server.accept();
            System.out.println("Connection from:"+socket.getInetAddress());
            Scanner in = new Scanner (socket.getInputStream());
            PrintWriter output = new PrintWriter(socket.getOutputStream());
        }
    }catch(Exception e){
        System.out.println(e);
    }

是否会在此处添加任何可能的 Java 代码以使程序同时为多个客户端提供服务?

4

1 回答 1

1

您发布的代码实际上并没有对客户端连接任何事情,这很难帮助您。但是,是的,服务器完全有可能处理多个并发连接。

我的猜测是,问题在于您使用同步 IO 在单个线程上执行所有操作。这意味着当您等待来自现有客户端的数据时,您不会接受新连接。通常,服务器采用以下两种方法之一:

  • 当它接受一个连接时启动一个线程(或重用线程池中的一个),并让该线程独占处理该连接。
  • 使用异步 IO 在单个线程(或少量线程)上完成所有操作。

后一种方法可能更有效,但也明显更复杂。我建议您使用“每个连接的线程”方法开始。在您进行试验时,您可以在每次客户端连接时简单地启动一个全新Thread的 - 但对于生产用途,您将使用一个ExecutorService或类似的东西,以便重用线程。

请注意,根据您正在构建的服务器类型,所有这些都可以在第三方库中为您完成。

于 2013-09-16T05:46:23.067 回答