2012-01-21 16 views
2

我想知道,如何确定使用asio库将组播数据包发送到组播组的机器的IP地址。现在我的来源是这样的:如何在asio中查找组播发送者地址?

std::string listen_addr4 = lpd_config.config.lpd_listen_host4(); 
std::string multicast_addr4 = lpd_config.config.lpd_multicast_host4(); 
short multicast_port = lpd_config.config.lpd_multicast_port(); 

asio::ip::udp::endpoint lpd_listen_endpoint4(asio::ip::address::from_string(listen_addr4), multicast_port); //TODO ipv6 support 

asio::ip::udp::socket lpd_listen_socket4(lpd_io_service, lpd_listen_endpoint4.protocol()); //TODO ipv6 support 

lpd_listen_socket4.set_option(asio::ip::udp::socket::reuse_address(true)); 
lpd_listen_socket4.bind(lpd_listen_endpoint4); //TODO ipv6 support 

lpd_listen_socket4.set_option(asio::ip::multicast::join_group(asio::ip::address::from_string(multicast_addr4))); //TODO ipv6 support 

接下来要做什么?

回答

3

由于任何机器都可以广播到多播组,因此您需要做的就是开始收听消息,在upd :: socket对象上使用receive_fromasync_receive_from方法。

这些方法将使用远程对等体详细信息填充端点对象,然后您可以将其解析为地址。

+0

非常感谢!监听端点地址改变为发送者地址,这不太直观。 –