boost::asio UDP-Übertragung

Lesezeit: 1 Minute

Benutzer-Avatar
Nijansen

Ich möchte UDP-Nachrichten an alle Computer in einem lokalen Netzwerk senden boost::asio. Arbeiten Sie die Beispiele durch, die ich mir ausgedacht habe

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

und möchte Nachrichten aus meiner Warteschlange mit übertragen

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

aber mein Code löst eine Ausnahme aus invalid argument Ausnahme im ersten Codeblock. Es funktioniert gut für 127.0.0.1 obwohl. Was mache ich falsch?

Benutzer-Avatar
nabulke

Probieren Sie das folgende Code-Snippet aus, um einen UDP-Broadcast zu senden, indem Sie das verwenden ba::ip::address_v4::broadcast() Anruf, um einen Endpunkt zu erhalten:

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

  • Wie können Sie vermeiden, Nachrichten an sich selbst zu senden?

    – Yonutix

    6. Mai 2015 um 8:56 Uhr

  • @yonutix Nein, es ist der Zweck des Broadcastings, eine Nachricht an alle zu senden (und sich selbst ist daher eingeschlossen).

    – MicroCheapFX

    17. November 2016 um 9:39 Uhr

1015810cookie-checkboost::asio UDP-Übertragung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy