我正在尝试使用线程池开发一个 java 聊天服务器,但我不知道如何处理来自客户端的传入消息。我想将每个套接字连接保存在哈希图中并将任务添加到线程池队列中。但是服务器如何知道他何时从客户端接收消息而不实例化缓冲读取器?
2 回答
            0        
        
		
您的服务器将需要使用包含从其套接字读取的 BufferedReader 的代理对象。也许您需要创建这些代理对象的集合。
例如,
class ServerAgent implements Runnable {
   private OutputStream out;
   private BufferedReader br;
   public ServerAgent(Socket clientSocket) throws IOException {
      out = clientSocket.getOutputStream();
      br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
      // ....
   }
   @Override
   public void run() {
      // TODO finish code that reads from br, BufferedReader
   }
}
你的服务器可能有如下代码:
while (true) {
   Socket clientSocket = server.accept();
   futureList.add(threadPoolExector.submit(new ServerAgent(clientSocket)));
}
于 2013-09-15T19:18:55.963   回答
    
    
            0        
        
		
您不需要为每个套接字初始化一个缓冲读取器。您可以查看并检查是否有数据等待读取。
for(Socket socket : socketsList)
    if(socket.getInputStream().available() > 0) {
        // you have data to be read from this socket
    }
于 2013-09-15T19:27:54.233   回答