当前位置: 首页 > 知识库问答 >
问题:

带线程池的Java聊天服务器

呼延高超
2023-03-14

我正在尝试使用线程池开发一个java聊天服务器,但我不知道如何处理来自客户端的传入消息。我想将每个套接字连接保存在哈希图中,并将任务添加到线程池的队列中。但是,服务器如何知道何时从客户端接收消息而不实例化缓冲区读取器?

共有2个答案

佟颖逸
2023-03-14

您的服务器将需要使用包含从其套接字读取的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)));
}
柳均
2023-03-14

你不需要为你的每个套接字初始化一个缓冲的阅读器。您可以浏览并检查是否有数据等待读取。

for(Socket socket : socketsList)
    if(socket.getInputStream().available() > 0) {
        // you have data to be read from this socket
    }
 类似资料:
  • 本文向大家介绍Java多线程实现聊天客户端和服务器,包括了Java多线程实现聊天客户端和服务器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java聊天室代码,供大家参考,具体内容如下 主要涉及知识 ·Java中GUI程序的编写,包括事件监听机制。 ·Java的网络通信编程,ServerSocket,Socket类的使用。 ·Java中多线程的编程,Thread类,Runnable

  • 8.10. 示例: 聊天服务 我们用一个聊天服务器来终结本章节的内容,这个程序可以让一些用户通过服务器向其它所有用户广播文本消息。这个程序中有四种goroutine。main和broadcaster各自是一个goroutine实例,每一个客户端的连接都会有一个handleConn和clientWriter的goroutine。broadcaster是select用法的不错的样例,因为它需要处理三种

  • 主要内容:服务端程序,客户端程序本节将带领大家结合咱们前面所学的知识开发一个聊天的示例程序,它可以在几个用户之间相互广播文本消息。 服务端程序 服务端程序中包含 4 个 goroutine,分别是一个主 goroutine 和广播(broadcaster)goroutine,每一个连接里面又包含一个连接处理(handleConn)goroutine 和一个客户写入(clientwriter)goroutine。 广播器(broa

  • 我试图理解为什么下面的代码片段不能像预期的那样工作。 我已经有的客户,我正在创建2个可调用的任务,并要求他们执行方法。 这两个事务一起运行(在从数据库中读取客户副本(如代码所示)后,我引入了1秒的延迟),并使用

  • 问题内容: 服务器和客户端使用我自己的协议(类似于XMPP)进行通信。我应该实现聊天应用程序。因此,当一个用户写String时,应该立即将其通过服务器发送给其他客户端。我在服务器上有sendToAll方法。但是用户只有在按Enter时才能看到其他用户的消息。 用户如何在不按Enter键的情况下接收消息? 这是我的客户: 和带有ServerThread的服务器。 ServerThread。 问题答案