2016-07-19 8 views
0

Я совершил ошибку в своей программе, используя boost :: asio, поскольку при получении многоадресных данных он связывается с адресом многоадресной передачи, а не с локальным интерфейсом ip. Ошибок нет. Как-то на многопользовательском Linux-хосте он все равно получал многоадресные данные. Но когда я запускаю его на другом многоквартирном ящике, он не мог. Что это сделал?boost asio multicast join

boost::asio::ip::address multicast_address(boost::asio::ip::address::from_string("239.1.1.100")); 
unsigned port(12345); 
boost::asio::io_service io; 
boost::asio::ip::udp::socket socket; 

boost::asio::ip::udp::endpoint listen_endpoint(multicast_address, multicast_port); 
socket.open(listen_endpoint.protocol()); 
socket.set_option(boost::asio::ip::udp::socket::reuse_address(true)); 
socket.bind(listen_endpoint); 
socket.set_option(boost::asio::ip::multicast::join_group(multicast_address)); 

ответ

0

The listen_endpoint должен быть связан с адресом локальной конечной точки приемника, то есть какой сетевой интерфейс для использования. Установка в any() позволяет boost использовать приемник по умолчанию, например .:

boost::asio::ip::udp::endpoint listen_endpoint 
    (boost::asio::ip::address_v4::any(), multicast_port); 

multicast_address должен только использоваться, чтобы присоединиться к группе многоадресной рассылки, в соответствии с последней строки.

Там какая-то полезная информация об этом здесь: Are you ready for IPV6?

+0

спасибо за ответ. Я понял, что код имеет ошибку и должен быть локальным интерфейсом приемника. Но то, что я хочу знать, это то, что теперь делает этот блок кода. – surfcode

+0

Извините @surfcode Я не знаю, я знаю только, что использование 'multicast_address' для' listen_endpoint' неверно. Он работает сейчас? – kenba

+0

Он всегда работал, даже с неправильным связыванием – surfcode