2016-07-19 36 views
0

boost :: asioを使用して私のプログラムで間違いを犯しました。マルチキャストデータを受信すると、ローカルインターフェイスのipではなくマルチキャストアドレスにバインドされます。エラーはありません。何とかマルチホームのLinuxホスト上で、マルチキャストデータを受信しました。しかし、私は別のマルチホームボックスでそれを実行すると、それはできませんでした。これはどうしたのですか?boost asio multicast join

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()に設定すると、boostmulticast_addressがちょうど最後の行ごとに、マルチキャストグループに参加するために使用されるべき

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

、例えば:デフォルトの受信機を使用することができます。返信用Are you ready for IPV6?

+0

感謝:

ここではそれについていくつかの有用な情報があります。コードに間違いがあり、受信者のローカルインターフェイスでなければならないことを理解しました。しかし、私が知りたいのは、「その」コードブロックが今何をしているのかです。 – surfcode

+0

申し訳ありません@surfcodeわかりません。私は 'listen_endpoint'に' multicast_address'を使うのは間違っていることを知っています。それは今働きますか? – kenba

+0

間違ったバインドがあっても、 – surfcode

関連する問題