这是对等的吗?UDP Java聊天服务



我目前正在编写一个对等UDP聊天服务。我为每个客户端提供了两个线程,一个接收消息,另一个发送消息,这样两个线程都可以同时完成。我真的很努力地想办法";找出";其他客户端将连接到什么端口,所以我决定创建一个";广播";类(线程(,客户端创建后将向其中发送消息。广播将每个唯一的InetAddress+端口存储在HashMap中,然后将接收到的消息发送到HashMap中的每个客户端。

所以我的问题是:这算是P2P吗?从技术上讲,他们不会直接向对方发送信息。我真的很难找到一种方法来实现我的其他想法,比如只使用广播类创建这个带有客户端信息的HashMap,然后将这个HashMap传输到每个客户端,这样他们现在就可以直接发送到每个Peer。但后来我遇到了其他问题,比如:我的接收线程如何将这个HashMap传递给发送线程?

事实上,这不是p2p。

将你的程序分为两个步骤:首先,客户端在其主线程上,将从广播服务器获取连接详细信息,然后它将启动线程以进行收听/发布。这是此类程序的常见模式。

如果你不提前知道端口(因为你想使用操作系统分配的随机端口(,你有两个选项:

  1. 拥有"接收线程";将其正在监听的端口张贴到广播服务器;发送线程";将从广播服务器中提取它需要发送到的ip/端口。事实上,线程是一个"线程";接收线程";声明其角色,而不是不允许发送请求
  2. 您可以有一个由两个线程访问的对象(在初始化时传递给它们(来传递信息。此对象必须是线程安全的

在我看来,选项1更清洁。它很简单,更坚固。

最新更新