我想知道一个使用服务器套接字的简单服务器程序是否真的能够同时处理多个客户端?我正在创建一个需要处理多个客户端的服务器程序。有相同的端口号。但问题是,程序一次只能为一个客户端服务,为了服务另一个客户端,必须终止第一个连接。
以下是代码:
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代码,以便该程序同时为多个客户端服务?
发布于 2013-09-16 05:46:23
您发布的代码实际上并没有对客户端连接做任何事情,这使您很难帮助您。但是是的,服务器完全有可能处理多个并发连接。
我的猜测是,问题在于,您使用同步IO在一个线程上完成了所有工作。这意味着当您在等待来自现有客户端的数据时,您不会接受新的连接。通常,服务器采用两种方法之一:
后一种方法可以更有效,但也要复杂得多。我建议您首先使用“每个连接线程”的方法。当您进行实验时,您可以在每次客户端连接时启动一个全新的Thread --但是对于生产用途,您可以使用一个ExecutorService或类似的东西,以便重用线程。
请注意,根据您正在构建的服务器类型,所有这些都很可能是在第三方库中为您完成的。
https://stackoverflow.com/questions/18821069
复制相似问题