Boost UDP многоадресный получатель: set_option: запрошенный адрес недопустим в своем контексте

Я следую учебному пособию по серверу времени Boost по UDP Вот
. Я изменяю код с этим для предопределенных значений:

short multicast_port = 13;  // (in class receiver)

и в main ():

//if (argc != 3) and the code for argv that follows are commented out
receiver r(io_context, boost::asio::ip::make_address("127.0.0.1"), boost::asio::ip::make_address("127.0.0.1")); //

Эта ошибка выдается:

set_option: The requested address is not valid in its context

Я пробовал «0.0.0.0» и «127.0.0.1» и другие значения. Тем не менее получить ту же ошибку. Может ли кто-нибудь помочь мне разобраться, что пошло не так?

Чтобы прояснить ситуацию, это код, который я использую:

#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <array>
#include <string>
using boost::asio::ip::udp;
using std::cout;
using std::cin;
using std::endl;

class receiver
{
private:
boost::asio::ip::udp::socket socket_;
boost::asio::ip::udp::endpoint sender_endpoint_;
std::array<char, 1024> data_;
short multicast_port = 13000;

public:
receiver(boost::asio::io_context& io_context,
const boost::asio::ip::address& listen_address,
const boost::asio::ip::address& multicast_address)
: socket_(io_context)
{
// Create the socket so that multiple may be bound to the same address.
boost::asio::ip::udp::endpoint listen_endpoint(
listen_address, multicast_port);
socket_.open(listen_endpoint.protocol());
socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));
socket_.bind(listen_endpoint);

// Join the multicast group.
socket_.set_option(
boost::asio::ip::multicast::join_group(multicast_address));

do_receive();
}

private:
void do_receive()
{
socket_.async_receive_from(
boost::asio::buffer(data_), sender_endpoint_,
[this](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
std::cout.write(data_.data(), length);
std::cout << std::endl;

do_receive();
}
});
}
};

int main(int argc, char* argv[])
{
try
{
boost::asio::io_context io_context;
receiver r(io_context, boost::asio::ip::make_address("127.0.0.1"), boost::asio::ip::make_address("127.0.0.1"));
io_context.run();
}
catch (std::exception& e)
{
std::cerr << "Exception: " << e.what() << "\n";
}return 0;
}

-1

Решение

Третий параметр конструктора — это адрес группы многоадресной рассылки.

127.0.0.1 не является адресом группы многоадресной рассылки и не является 0.0.0.0.

Обратитесь к вашему источнику.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]