2012-02-16 37 views
12

boost::asioを使用してローカルネットワーク内のすべてのコンピュータにUDPメッセージをブロードキャストします。例を挙げて取り組んで私はboost :: asio UDPブロードキャスト

try { 
    socket.open(boost::asio::ip::udp::v4()); 
    boost::asio::socket_base::broadcast option(true); 
    socket.set_option(option); 
    endpoint = boost::asio::ip::udp::endpoint(
     boost::asio::ip::address::from_string("192.168.1.255"), 
     port); 
} 
catch(std::exception &e) { 
} 

を思い付いたと

while(!queue.empty()) { 
    std::string message = queue.front(); 
    boost::system::error_code ignored_error; 
    socket.send_to(
     boost::asio::buffer(message), 
     endpoint, 
     0, ignored_error); 
    queue.pop_front(); 
} 

と私のキューからメッセージをブロードキャストしたいが、私のコードは、最初のコードブロック内の例外invalid argument例外をスローします。しかし、それは127.0.0.1でもうまく動作します。私は間違って何をしていますか?

答えて

22

は、エンドポイントを取得するためにba::ip::address_v4::broadcast()コールを利用し、UDPブロードキャストを送信するために、次のコードスニペットを試してみてください。完全に

bs::error_code error; 
    ba::ip::udp::socket socket(_impl->_ioService); 

    socket.open(ba::ip::udp::v4(), error); 
    if (!error) 
    { 
     socket.set_option(ba::ip::udp::socket::reuse_address(true)); 
     socket.set_option(ba::socket_base::broadcast(true)); 

     ba::ip::udp::endpoint senderEndpoint(ba::ip::address_v4::broadcast(), port);    

     socket.send_to(data, senderEndpoint); 
     socket.close(error); 
    } 
+1

作品。ありがとう。 – nijansen

+0

メッセージを自分宛に送信しないようにするにはどうすればよいですか? – yonutix

+2

@yonutixいいえ、それはすべてにメッセージを送信するための放送の目的です(と自己が含まれているため)。 – MicroCheapFx

関連する問題