我有一个这样的听众:
receiver r(io_service,
boost::asio::ip::address::from_string(argv[1]),
boost::asio::ip::address::from_string(argv[2]));
如果我使用参数运行代码
./BoostAsioMCReceiver 0.0.0.0 239.255.0.1
侦听器从发送者(在另一台计算机上)获得所有多播数据包。但是,如果我实际输入机器的以太网 IP 地址,例如
./BoostAsioMCReceiver 172.22.1.5 239.255.0.1
接收方似乎没有收到任何数据包。我需要这样做,因为计算机有多个以太网卡,并且我需要确定数据包从给定的 NIC 发出,并扩展为正确的交换机。
接收器如下所示:
receiver(boost::asio::io_service& io_service,
const boost::asio::ip::address& listen_address,
const boost::asio::ip::address& multicast_address)
: socket_(io_service)
{
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);
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));
}
private:
boost::asio::ip::udp::socket socket;
boost::asio::ip::udp::endpoint sender_endpoint;
为什么会发生这种情况,建议的修复方法是什么?
谢谢。