Я использую 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 части информации: локальный интерфейс / удаленный интерфейс / удаленный порт, и все они верны, потому что я могу отлично слушать на первом канале.1010 *
Спасибо.