我实现了一个利用多播消息的网络发现过程。它允许发现具有连接到同一段的任何ip地址的特定设备。
客户端A发送多播消息,要求其他客户端。其他客户端使用多播消息“我在这里......”进行响应。基本上这很好用。
但有一个案例让我感到麻烦。
Client A Client B
192.168.2.5 192.168.2.5
| |
\__________ /
>>>
UDP Multicast Message:
Source: 192.168.2.5 | Destination: 224.0.0.150
可能出现同意,发送多播消息的客户端A和客户端B都收听相同的IP地址。在这种情况下,UDP数据包的源地址与目标客户端的IP地址相同。因此,客户端B上的应用程序不会收到任何多播消息。
我猜在具有相同消息的多播消息被阻止并丢弃在ip-stack中。有没有办法(套接字设置)接收它。
答案 0 :(得分:6)
是的,您可以让主机读取自己的多播数据包(通常只是源IP地址的过滤器),这由IP_MULTICAST_LOOP套接字选项控制。
int loop = 1;
setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));