如何设置一个 multicast/unicast 环境,每个成员都可以向组广播,还可以向特定成员发送特定数据

How to set up a multicast/unicast environment where every member can broadcast to the group and also send specific data to specific members

我正在尝试设计一个可以让任意数量的计算机相互通信的应用程序。我希望在 Java 中做到这一点,因为我最终想制作一个 android 应用程序。我对 java 很陌生,对套接字编程也很陌生。这是我想要的示例:

我有三台电脑,一台 Raspberry Pi 配置为温度控制器,它使用热电偶并控制 SSR 根据输入加热某物。另一个 raspberry Pi 配置为温度记录器,它读取热电偶的温度但不控制任何东西。第三台 PC 是充当终端的台式机,不控制或读取任何内容,仅用于与其他人通信。

一般的工作流程应该是这样的:

  1. 每台电脑扫描寻找其他PC的运行应用程序。

  2. 其中一台计算机的用户可以选择另一台计算机进行连接。

  3. 所选终端将其跟踪的数据(在控制器的情况下为温度设定值和实际温度)发送到请求信息的计算机。

我最终想实现一些东西,让正在使用的终端可以发送命令(比如更新控制器的设定值),但可以稍后实现。

到目前为止,我对如何实现这一点的想法是: 对于第 1 点,我可以将每台机器设置为多播一个指示某些信息的对象,例如 IP、单播端口、机器类型(控制器、被动终端、临时记录器等)和也许其他一些可能有用的细节。

对于第 2 点,我不太确定如何基于多播开发可用终端列表。老实说,我不是 100% 确定多播是如何工作的,但我猜我可以从所有其他机器收集对象并显示它们。有人可以澄清一下不同客户端如何处理多播组上的多台主机广播吗?

对于第 3 点,我认为对于这一点,客户端使用端口和 IP 地址打开与预期主机的单播连接,然后主机通过定期向客户端发送数据(即温度设置)进行响应点和值)直到发送退出信号,此时套接字连接关闭。

所以我想我的问题是:这种方法有意义吗?有没有更简单的方法来完成这一切?

当您发送到多播 address/port 时,任何正在侦听该地址上该端口的主机都会看到该数据包。多播地址范围是 224.0.0.0 到 239.0.0.0(Google 了解更多详细信息。)这就是它的全部内容。

这是一种情况:

您的所有设备发送和接收to/on 相同的多播地址。您可以让每个设备定期发送 "I'm Alive" 消息。因此,要找出可用的设备,只需收听并收集列表即可。

与发送数据相同,主机可以在网络上将其数据(例如,温度读数)发送到该多播地址,任何收听的人都会收到它。然后接收设备可以对数据执行它想要的操作(如果有的话)。

此外,作为发现过程的一部分,您可以让主机广播它们的 "real"(单播)IP 地址,这样如果您以后想建立直接(UDP 或 TCP)连接,您有你需要的信息。

就示例而言,我敢肯定 Google 有很多,这里是一个: http://download.java.net/jdk7/archive/b123/docs/api/java/net/MulticastSocket.html