Penso che ci sia un errore nella boost example code for udp multicast.
Nel codice di esempio collegano il socket all'interfaccia locale ma per il multicast di udp è necessario eseguire il binding all'IP e alla porta del gruppo multicast di udp.
socket_.bind(listen_endpoint);
dovrebbe essere:
socket_.bind(
boost::asio::ip::udp::endpoint(multicast_address, multicast_port));
vedere multicast howto:
... per un processo di ricevere datagrammi multicast che ha da chiedere al kernel di unirsi al gruppo e legare il porta quei datagrammi venivano inviati a a. Lo strato UDP utilizza sia l'indirizzo di destinazione e la porta a demultiplexare i pacchetti e decidere quale presa (s) consegnarli a ...
... è necessario avvisare il kernel che i gruppi multicast siamo interessati a . Cioè, dobbiamo chiedere al kernel di "join" quei gruppi multicast ...
controllo se ti sei iscritto al gruppo su interfaccia corretta con netstat -g | grep <multicast_group_ip>
questo è credo esempio di codice errato spinta :
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));
socket_.async_receive_from(
boost::asio::buffer(data_, max_length), sender_endpoint_,
boost::bind(&receiver::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
usare 'multicast :: join_group (indirizzo_ multicast, listen_endpoint.address(). A_v4())'. –
Grazie per il tuo promemoria. Appena provato, e dobbiamo impostare "0.0.0.0" su listen_endpoint. Quindi la versione operativa è boost :: asio :: ip :: udp :: endpoint listen_endpoint (udp :: v4(), multicast_port); ... socket_.set_option (multicast :: join_group (indirizzo :: from_string (gruppo _). A_v4(), indirizzo: from_string (interfaccia) .to_v4())); – poordeveloper
@Stefan pubblica il tuo commento come risposta –