将消息发送到同一网络上的应用程序的所有其他实例

时间:2016-01-06 14:56:26

标签: c++ boost multicast

如何在同一网络上使用多播发送消息?

我正在使用C ++,库增强。我玩过发送者和接收者的例子。

但我也有几个问题,我是网络和C ++的新手。 组播端口设置为30001,有什么好的理由吗?

示例表明我使用了发件人:

  

IPv4 239.255.0.1

     

IPV6 ff31 :: 8000:1234

对于接收者:

  

IPv4 0.0.0.0 239.255.0.1

     

IPv6 0 :: 0 ff31 :: 8000:1234

为何选择这些特定地址?

同样在接收器示例中,有一个专用于加入多播地址的部分,有没有办法检查是否有新连接出现在这个地址上?要查看哪个新实例加入或离开连接,这可能吗?

但我的主要问题是,如果我要从运行该示例的计算机上发送Hello World这样的消息,它是否会显示在同一网络上的另一台计算机上?

1 个答案:

答案 0 :(得分:1)

  

为何选择这些特定地址?

这些是IP协议(IPv4 / IPv6)指定的用于多播的地址。部分地址是组规范(我认为IPv4为255.0.1,IPv6为1234)。流量会转发到本地计算机上的特定端口,但我不知道/无法找到详细信息。

  

同样在接收器示例中,有一个专用于加入多播地址的部分,有没有办法检查是否有新连接出现在这个地址上?要查看哪个新实例加入或离开连接,这可能吗?

不,没有这样的内置功能。应该将多播发送到至少所有感兴趣的机器。加入是网络/本地操作系统的一个信号,您感兴趣的机器,它应该拾取和转发相关的数据包。在所有情况下都不需要转发这样的信号(即,如果路由器已经有分组)。

但是,您可以在加入后在频道上广播您的状态,但这是您要在多播上实施的协议的一部分。

  

但我的主要问题是,如果我要从运行该示例的计算机上发送Hello World这样的消息,是否会出现在同一网络上的另一台计算机上?

取决于。如果您连接到同一层1(直接以太网或直接WiFi)结构,那么可能是。如果您必须跳过路由器/接入点,他们可能会有阻止流量的防火墙规则。

有关其工作原理的摘要,请参阅wikipedia。或者阅读rfc1112rfc4604rfc5771作为标准。