【问题标题】:boost::asio UDP broadcastingboost::asio UDP 广播
【发布时间】:2012-03-07 18:56:26
【问题描述】:

我想使用 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。我做错了什么?

【问题讨论】:

    标签: c++ boost udp boost-asio broadcast


    【解决方案1】:

    尝试使用以下代码 sn-p 发送 UDP 广播,利用 ba::ip::address_v4::broadcast() 调用获取端点:

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

    【讨论】:

    • 如何避免给自己发信息?
    • @yonutix 不,广播的目的是向所有人发送消息(包括自我)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2018-05-29
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多