gpt4 book ai didi

c++ - 如何从多个组播远程接口(interface)接收?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:01:34 26 4
gpt4 key购买 nike

我在以下方面使用 Boost::asio。

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

以下是我的代码:

// 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));

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

有没有人知道哪里出了问题?

谢谢。

最佳答案

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

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

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

关于c++ - 如何从多个组播远程接口(interface)接收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5505026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com