2012-02-16 33 views
12

U12 mesajlarını boost::asio kullanarak yerel bir ağdaki tüm bilgisayarlara yayınlamak istiyorum. örneklerle çalışmak Benboost :: asio UDP yayını

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) { 
} 

ile geldi ve

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(); 
} 

ile Kuyruğumdan yayın mesajı istiyorum ama benim kod birinci kod bloğu bir istisna invalid argument istisna atar. Yine de 127.0.0.1 için iyi çalışıyor. Neyi yanlış yapıyorum?

cevap

22

bir uç noktasını almak için ba::ip::address_v4::broadcast() aramayı kullanan bir UDP yayını göndermek için aşağıdaki kod parçacığını deneyin: mükemmel

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

eserler. Teşekkürler. – nijansen

+0

Kendilerine mesaj göndermekten nasıl kaçınabilirsiniz? – yonutix

+2

@yonutix Hayır, herkese mesaj göndermek (ve dahil olmak üzere) yayınlamak amacıdır. – MicroCheapFx

İlgili konular