为多个客户提供服务

时间:2013-09-16 05:42:26

标签: java client-server serversocket

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

以下是代码:

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

1 个答案:

答案 0 :(得分:1)

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

我的猜测是问题是你在同一个IO上用一个线程做所有事情。这意味着当您等待现有客户端的数据时,您不会接受新连接。通常,服务器采用以下两种方法之一:

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

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

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

相关问题