【问题标题】:Binding two multicast sockets on the same port在同一个端口上绑定两个多播套接字
【发布时间】:2011-12-05 16:34:40
【问题描述】:

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

  • 进程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) 接收流量

这两个进程的底层代码使用的是 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" ) ) );

【问题讨论】:

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


    【解决方案1】:

    我想通了。根本原因不是在两个进程之间使用了唯一的listenInterface。通过将绑定中使用的listenInterface切换到本地端点,我让它工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2016-06-07
      相关资源
      最近更新 更多