2012-02-16 19 views
12

Desidero trasmettere messaggi UDP a tutti i computer in una rete locale utilizzando boost::asio. Lavorando attraverso gli esempi che si avvicinò conboost :: broadcasting 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) { 
} 

e voglio trasmettere messaggi dal mio coda 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(); 
} 

ma il mio codice genera un'eccezione invalid argument eccezione nel primo blocco di codice. Funziona bene per 127.0.0.1 però. Che cosa sto facendo di sbagliato?

risposta

22

provare il seguente frammento di codice per inviare una trasmissione UDP, utilizzando la chiamata ba::ip::address_v4::broadcast() per ottenere un endpoint:

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

funziona perfettamente. Grazie. – nijansen

+0

Come si può evitare di inviare messaggi a se stessi? – yonutix

+2

@yonutix No, è lo scopo della trasmissione di inviare messaggi a tutti (e il sé è quindi incluso). – MicroCheapFx

Problemi correlati