2012-02-16 17 views
12

que desea difundir mensajes UDP a todos los equipos de una red local utilizando boost::asio. Trabajando a través de los ejemplos que se me ocurrióimpulso :: asio UDP difusió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) { 
} 

y desea difundir mensajes de mi cola con

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

pero mi código produce una excepción invalid argument excepción en el primer bloque de código. Sin embargo, funciona bien para 127.0.0.1. ¿Qué estoy haciendo mal?

Respuesta

22

Prueba el siguiente fragmento de código para enviar una difusión UDP, utilizando la llamada ba::ip::address_v4::broadcast() para obtener un punto final:

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

funciona perfectamente. Gracias. – nijansen

+0

¿Cómo puedes evitar enviar mensajes a ti mismo? – yonutix

+2

@yonutix No, el propósito de la transmisión es enviar mensajes a todos (y, por lo tanto, el uno mismo está incluido). – MicroCheapFx

Cuestiones relacionadas