次のようなリスナーがあります。
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;
なぜこれが起こっているのですか? また、推奨される修正方法は何ですか?
ありがとう。