在同一端口上绑定两个多播套接字

时间:2011-12-05 16:34:40

标签: c++ boost udp boost-asio multicast

我正在尝试从同一台计算机上的两个不同进程加入两个不同的多播组:

  • 进程A加入224.1.1.100端口10000
  • 进程B尝试加入224.1.1.101端口10000

进程A从224.1.1.100:10000获取数据就好了。

问题是进程B没有从224.1.1.101:10000接收流量 - 而是接收来自进程A所做的连接的流量(224.1.1.100:10000)

2个进程的底层代码使用Boost Asio。每个进程都将套接字打开到同一个端口10000.但是,每个进程都将连接发送到一个单独的多播组(进程A到224.1.1.100,进程B到224.1.1.101)。

关键问题似乎是将套接字打开到同一端口的两个进程。考虑到必须侦听两个组播组(224.1.1.100和224.1.1.101)上的相同端口,我怎样才能完成这项工作?

处理示例代码:


listenInterface( boost::asio::ip::address::from_string( "0.0.0.0" ) ),
localEndpoint = boost::asio::ip::udp::endpoint( listenInterface, 10000 );
socket.bind( localEndpoint );
socket.set_option( boost::asio::ip::multicast::join_group( boost::asio::ip::address::from_string( "224.1.1.100" ) ) );

进程B示例代码:


listenInterface( boost::asio::ip::address::from_string( "0.0.0.0" ) ),
localEndpoint = boost::asio::ip::udp::endpoint( listenInterface, 10000 );
socket.bind( localEndpoint );
socket.set_option( boost::asio::ip::multicast::join_group( boost::asio::ip::address::from_string( "224.1.1.101" ) ) );

1 个答案:

答案 0 :(得分:1)

我明白了。根本原因不是在两个进程之间使用唯一的listenInterface。通过将绑定上使用的listenInterface切换到本地端点,我得到了它。