在windows下使用boost::asio进行Udp广播
udp broadcast using boost::asio under windows
我有一个应用程序的udp广播小节的问题。我在windows 10下使用boost 1.62.0。
void test_udp_broadcast(void)
{
boost::asio::io_service io_service;
boost::asio::ip::udp::socket socket(io_service);
boost::asio::ip::udp::endpoint remote_endpoint;
socket.open(boost::asio::ip::udp::v4());
socket.set_option(boost::asio::ip::udp::socket::reuse_address(true));
socket.set_option(boost::asio::socket_base::broadcast(true));
remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address_v4::any(), 4000);
try {
socket.bind(remote_endpoint);
socket.send_to(boost::asio::buffer("abc", 3), remote_endpoint);
} catch (boost::system::system_error e) {
std::cout << e.what() << std::endl;
}
}
我收到:send_to:请求的地址在其上下文中无效从钓上来的。
我尝试将端点从any()更改为broadcast(),但是这只会在bind()上抛出相同的错误。
我通常在linux下编程,这段代码在我的正常目标上工作。所以我抓耳挠腮,不知道我哪里做错了。谁能给我指点一下正确的方向?
我相信您希望使用any()将套接字绑定到本地端点(如果您希望接收广播数据包-参见此问题),并使用broadcast()发送到远程端点(参见此问题)。
下面的代码为我编译并且不抛出任何错误:
void test_udp_broadcast(void)
{
boost::asio::io_service io_service;
boost::asio::ip::udp::socket socket(io_service);
boost::asio::ip::udp::endpoint local_endpoint;
boost::asio::ip::udp::endpoint remote_endpoint;
socket.open(boost::asio::ip::udp::v4());
socket.set_option(boost::asio::ip::udp::socket::reuse_address(true));
socket.set_option(boost::asio::socket_base::broadcast(true));
local_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address_v4::any(), 4000);
remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address_v4::broadcast(), 4000);
try {
socket.bind(local_endpoint);
socket.send_to(boost::asio::buffer("abc", 3), remote_endpoint);
} catch (boost::system::system_error e) {
std::cout << e.what() << std::endl;
}
}
相关文章:
- 如何在async_read_until后使用 asio 缓冲区进行连续读取
- 使用boost :: asio进行简单的UDP通信
- Boost::ASIO:针对最小流量、长连接、小消息、即时传递进行优化
- 在Windows和Linux上使用Boost/ASIO在MingW中使用Boost/ASIO进行故障
- 使用Boost.ASIO与服务器进行简单的网络tcp通信
- 是否对提升 asio 插槽进行适当的 RAII 清理
- 当io_service被螺纹时,在boost.asio中进行异常处理
- 如何使用硬件流控制进行提升::ASIO::serial_port_base::flow_control
- boost-asio在两个线程c++之间进行通信
- 使用Boost ASIO和Boost posix时间在WinXP 32下对传入的串行数据进行时间戳
- Boost ASIO服务器和Java客户端之间通过TCP进行双重发送
- 如何使用boost::asio在http上进行POST
- 使用Asio进行DNS反向查找
- 当使用asio和C++11接受或接收时,优雅地停止线程进行阻塞或非阻塞
- 在windows下使用boost::asio进行Udp广播
- 如何最好地对使用boost::asio::yield_context的类进行单元测试
- 如何对依赖于Asio的一段代码进行单元测试
- Amazon S3在尝试使用boost asio进行PUT时出现403错误
- 使用boost::asio定时器进行线程安全工作
- 用asio进行C++11类型的推导