提升 asio 广播不会在所有界面上播放
boost asio broadcast not going out on all interfaces
如果用boost asio设置程序。
如果只有一个网络接口存在,广播工作正常。
但是,如果有更多网络接口,则每个广播仅在一个接口上发送。界面随机变化。正如 wireshark 所观察到的。
我希望每个广播都能在每个接口上发出。
谁错了?我,boost或者我对boost使用方法的理解。好吧,我知道,后者是最有可能的:)。
以及如何获得预期的行为。
int myPort=5000;
boost::asio::io_context io_Context{};
boost::asio::ip::udp::socket socket{io_Context};
std::thread sendWorkerThread;
void SendWorkerStart() {
boost::asio::executor_work_guard<decltype(io_Context.get_executor())> work { io_Context.get_executor() };
io_Context.run();
}
void setupSocket() {
socket.set_option(boost::asio::socket_base::reuse_address(true));
socket.set_option(boost::asio::socket_base::broadcast(true));
boost::system::error_code ec;
socket.bind(boost::asio::ip::udp::endpoint(boost::asio::ip::address_v4::any(), myPort), ec);
sendWorkerThread = std::thread(udpSocket_c::SendWorkerStart, this);
SendWorkerStart();
}
void SendBroadcast(UdpMessage_t &&message, int size) {
boost::system::error_code ec;
std::lock_guard<std::mutex> lockGuard(sendMutex);
udp::endpoint senderEndpoint(boost::asio::ip::address_v4::broadcast(), myPort);
socket.async_send_to(boost::asio::buffer(message->data(), size), senderEndpoint,
[this](const boost::system::error_code& error,
std::size_t bytes_transferred) { /* nothing to do */} );
}
感谢您的帮助。
编辑: 现在 运行 在 Windows,但也需要在 Linux.
中工作
正如 Alan Birtles 在对问题的评论中所建议的,我在这里找到了解释:
UDP-Broadcast on all interfaces
我通过遍历他配置的接口并将广播发送到链接答案所建议的每个网络广播地址解决了这个问题。
如果用boost asio设置程序。 如果只有一个网络接口存在,广播工作正常。 但是,如果有更多网络接口,则每个广播仅在一个接口上发送。界面随机变化。正如 wireshark 所观察到的。
我希望每个广播都能在每个接口上发出。
谁错了?我,boost或者我对boost使用方法的理解。好吧,我知道,后者是最有可能的:)。
以及如何获得预期的行为。
int myPort=5000;
boost::asio::io_context io_Context{};
boost::asio::ip::udp::socket socket{io_Context};
std::thread sendWorkerThread;
void SendWorkerStart() {
boost::asio::executor_work_guard<decltype(io_Context.get_executor())> work { io_Context.get_executor() };
io_Context.run();
}
void setupSocket() {
socket.set_option(boost::asio::socket_base::reuse_address(true));
socket.set_option(boost::asio::socket_base::broadcast(true));
boost::system::error_code ec;
socket.bind(boost::asio::ip::udp::endpoint(boost::asio::ip::address_v4::any(), myPort), ec);
sendWorkerThread = std::thread(udpSocket_c::SendWorkerStart, this);
SendWorkerStart();
}
void SendBroadcast(UdpMessage_t &&message, int size) {
boost::system::error_code ec;
std::lock_guard<std::mutex> lockGuard(sendMutex);
udp::endpoint senderEndpoint(boost::asio::ip::address_v4::broadcast(), myPort);
socket.async_send_to(boost::asio::buffer(message->data(), size), senderEndpoint,
[this](const boost::system::error_code& error,
std::size_t bytes_transferred) { /* nothing to do */} );
}
感谢您的帮助。
编辑: 现在 运行 在 Windows,但也需要在 Linux.
中工作正如 Alan Birtles 在对问题的评论中所建议的,我在这里找到了解释: UDP-Broadcast on all interfaces
我通过遍历他配置的接口并将广播发送到链接答案所建议的每个网络广播地址解决了这个问题。