【问题标题】:How to Receive from Multiple Multicast Remote Interfaces?如何从多个组播远程接口接收?
【发布时间】:2011-03-31 19:12:18
【问题描述】:

我将 Boost::asio 用于以下用途。

我正在尝试从多个 udp 多播通道接收数据包。但是,我在尝试让它发挥作用时遇到了很大的麻烦。目前只能收听第一个频道。

以下是我的代码:

// create a list of endpoints for each channel

endpoint_list.push_back(new boost::asio::ip::udp::endpoint( (boost::asio::ip::address::from_string(boost::get<1>(interfaces_list[i]))).to_v4(), boost::get<2>(interfaces_list[i])));

// create a list of join_groups for each channel

join_group_list.push_back(new boost::asio::ip::multicast::join_group( (boost::asio::ip::address::from_string(boost::get<1>(interfaces_list[i]))).to_v4(),   (boost::asio::ip::address::from_string(boost::get<0>(interfaces_list[i]))).to_v4() ) );

//initiate options on each channel

socket_list[i]->open(endpoint_list[i]->protocol());     socket_list[i]->set_option(boost::asio::ip::udp::socket::reuse_address(true));
socket_list[i]->bind(*endpoint_list[i]);
socket_list[i]->set_option(*join_group_list[i]);

// callback on each socket

socket_list[i]->async_receive_from(boost::asio::buffer(buffer_array_list[i], max_length), sender_endpoint_, boost::bind(&PacketLogger::HandleReceiveFrom, this, i, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));

如您所见,每个通道都有自己的套接字等。我有3条信息:本地接口/远程接口/远程端口,所有这些都是正确的,因为我可以在第一个频道上完美收听。

有人对可能出现的问题有任何想法吗?

谢谢。

【问题讨论】:

  • 您是遇到错误还是无法正常工作?

标签: c++ sockets boost udp multicast


【解决方案1】:

IP 多播在主机级别而不是套接字级别进行管理,如果您有两个冲突的套接字订阅,那么就会出现问题。

例如,您可以通过 IP_MULTICAST_IF 选项以仅发送模式加入组,随后该计算机上的任何应用程序都无法订阅该组中的任何数据。

要继续尝试在第三方应用程序中订阅,或者可以使用一些基本的 C 代码。

【讨论】:

  • 嗯,这看起来完全倒退了。您可以通过任何参考来支持您对IP_MULTICAST_IF 的主张吗?
  • @Nikolai 检查任何使用非对称多播通道的大型市场数据实施。对于基于 Reuters 和 TIBCO 的中间件系统来说,这常常是一种恼人的不便。
猜你喜欢
  • 2018-02-05
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
相关资源
最近更新 更多