我正在使用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条信息:本地接口/远程接口/远程端口,所有这些都是正确的,因为我可以在第一个频道上完全听完。
有没有人对可能出现的问题有任何想法?
感谢。
答案 0 :(得分:0)
IP多播是在主机级别而不是套接字级别进行管理的,如果您有两个冲突的套接字订阅,则会出现故障。
例如,您可以通过IP_MULTICAST_IF选项以只发送模式加入组,随后该计算机上的任何应用程序都无法订阅该组上的任何数据。
要继续尝试第三方应用程序中的订阅,或者改为使用一些基本的C代码。