2016-07-19 125 views
0

我在使用boost :: asio的程序中犯了一個錯誤,因爲在接收多播數據時,它綁定到多播地址而不是本地接口ip。沒有錯誤。不知何故,在多主機Linux主機上,它仍然收到組播數據。但是當我在另一個多家庭盒子上運行它時,它不能。這是做什麼的?boost asio多播加入

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

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我不知道,我只知道'listen_endpoint'使用'multicast_address'是錯誤的。它現在工作嗎? – kenba

+0

它一直在工作,即使是錯誤的綁定 – surfcode