提升asio多播加入

boost asio multicast join

本文关键字:多播 asio 提升      更新时间:2023-10-16

我在使用boost::asio的程序中犯了一个错误,因为当接收多播数据时,它绑定到多播地址,而不是本地接口ip。没有错误。不知怎的,在多家庭linux主机上,它仍然接收到多播数据。但当我在另一个多家庭盒子上运行时,它无法运行。这做了什么?

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 ) );

listen_endpoint应绑定到本地接收方端点的地址,即使用哪个网络接口。将其设置为any()可使boost使用默认接收器,例如:

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

multicast_address应该只用于加入多播组,如最后一行所示。

这里有一些有用的信息:你准备好使用IPV6了吗?