【问题标题】:Serving Multiple Clients服务多个客户
【发布时间】:2013-09-16 05:42:25
【问题描述】:

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

代码如下:

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 代码?

【问题讨论】:

标签: java client-server serversocket


【解决方案1】:

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

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

  • 在接受连接时启动线程(或从线程池重用线程),并让该线程独占处理该连接。
  • 使用异步 IO 在单个线程(或少量线程)上执行所有操作。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    相关资源
    最近更新 更多