boost::asio UDP broadcasting(boost::asio UDP 广播)
问题描述
我想使用 boost::asio
向本地网络中的所有计算机广播 UDP 消息.通过我想出的例子
I want to broadcast UDP messages to all computers in a local network using boost::asio
. Working through the examples I came up with
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) {
}
并且想要从我的队列中广播消息
and want to broadcast messages from my queue with
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
工作正常.我做错了什么?
but my code throws an exception invalid argument
exception in the first code block. It works fine for 127.0.0.1
though. What am I doing wrong?
推荐答案
尝试使用以下代码片段发送 UDP 广播,利用 ba::ip::address_v4::broadcast()
调用获取端点:
Try the following code snippet to send a UDP broadcast, utilizing the ba::ip::address_v4::broadcast()
call to get an 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);
}
这篇关于boost::asio UDP 广播的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:boost::asio UDP 广播
基础教程推荐
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 从 std::cin 读取密码 2021-01-01