我有一个小程序需要在同一 LAN 上的两台计算机之间进行通信。我对网络比较陌生,但从我读过的内容来看,这听起来像是我想要 UDP 多播,以便两台计算机可以发现彼此,之后我可以建立 TCP 连接以进行实际数据通信。我找到了这个我可以遵循的 UDP 多播的小例子。但是,我想知道多播组(HELLO_GROUP
在该示例中为225.0.0.37
)。
我怎么知道我应该使用哪个组?这个程序将在各种网络上运行,所以我不能硬编码一个(据我所知)。我是否从路由器获取组,如果是,我该怎么做?
您可以选择任何未被IANA列为保留的多播地址(224.0.0.0 到 239.255.255.255)。
可能(如果不太可能)另一个程序也将使用相同的地址。您可以通过使您的程序发出的公告消息适当地具体化来最大限度地减少这种造成任何混乱的可能性。例如
CORNSTALKS-DISCOVERY
HOST: {address:port}
[newline]
这将通知您的收件人用于他们的 TCP 连接的地址,但应该发现它的第一行被任何其他收件人拒绝。
你理解错了。
你说的是广播。广播 UDP 数据报被发送到子网中的每台计算机。(从技术上讲,您将数据报发送到地址 255.255.255.255。)
UDP 广播在特定子网内工作,但不跨越子网边界。也就是说,大多数路由器都配置为不路由广播数据报(减少垃圾邮件)。
OTOH 多播是完全不同的东西。多播的目的是避免使用 TCP(或任何其他单播)进行数据传输。当您需要“一次”向许多其他收件人发送内容时,这很好。这些机器初步同意特定的多播地址(例如您的示例中的 225.0.0.37),并“加入”该多播组。在特定的子网中,一切的工作方式都与广播非常相似,但是与广播相比,多播也可能跨越子网边界。这是因为当机器加入多播组时,会通知适当的路由器,并且它们能够适当地路由多播数据报。
编辑:
结论(澄清)。