使用提升库收听 udp 广播
Listening to an udp broadcast with the boost library
似乎是很多人都有的问题,但到目前为止我找到的所有答案都没有帮助。
问题:我正在尝试收听通过UDP将其数据包发送到我的PC的Velodyne HDL32。操作系统是32位Ubuntu和Boost库v1.46。
我通过Wireshark获得的数据如下所示:
Time | Source | Destination | Protocol | Length | Source Port | Destination Port
0.000000 | 192.168.17.212 | 192.168.3.255 | UDP | 1248 | https | opentable
但是使用此代码,不会向我显示任何数据(端口是正确的):
receiver(boost::asio::io_service& io_service,
const boost::asio::ip::address& listen_address)
: m_socket(io_service)
{
boost::asio::ip::address ipAddr = boost::asio::ip::address_v4::any();
boost::asio::ip::udp::endpoint listen_endpoint(
ipAddr, 2368);
m_socket.open(listen_endpoint.protocol());
m_socket.bind(listen_endpoint);
m_socket.async_receive_from(
boost::asio::buffer(m_data, max_length), m_sender_endpoint,
boost::bind(&receiver::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void handle_receive_from(const boost::system::error_code& error,
size_t bytes_recvd)
{
std::cout << "receive" << bytes_recvd << std::endl;
m_socket.async_receive_from(
boost::asio::buffer(m_data, max_length), m_sender_endpoint,
boost::bind(&receiver::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
到目前为止,任何人都可以确定问题还是需要更多信息?我很感激我能得到的任何帮助。
注意:我没有以root权限运行该程序!
一些想法:是否有可能 boost::asio::ip::address_v4::any() 不会侦听 IP ..*.255 当有子网掩码 255.255.255.0 时?
使用 netcat 时,也不会显示任何数据。当我使用Windows netcat时,它工作得很好。与Linux和Windows上的Wireshark相同 - 工作正常。也尝试过,但效果相同 - 没有数据。
谢谢大家对我的帮助。代码没问题,但问题出在速度和与之的网络设置方面。
对所有尝试使用Velodyne的人的解释:
velodyne有自己的子网(192.168.17.x)。所有记录的数据现在都通过广播发送到子网 192.168.3.x。在正常情况下,应在此子网中的所有 IP 上接收数据,但这似乎是不可能的。您可以接收数据的唯一IP是IP 255,并且仅当您使用这两种解决方案之一时。(或使用窗口或使用wireshark转储文件)
1. 愚蠢但可行的解决方案
将网关设置为 192.168.3.1。是的,没有,但没关系。从现在开始,您将收到IP 255的数据。
2. 清洁解决方案
设置一条新路由,将所有流量从 velodyne 子网引导到子网 192.168.3.x。
我真的不知道为什么它如此复杂,但我们花了相当长的时间才发现这个"秘密"。希望你们中的一些人能从我们挑剔的工作中受益。
您是否尝试过设置广播选项?
// do this before binding
boost::asio::socket_base::broadcast option(true);
m_socket.set_option(option);
- boost::asio UDP 广播客户端仅接收"fast"数据包
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- C++ UDP 广播使用 ::write
- LAN 上的计算机不会始终使用 boost::asio C++接收到 255.255.255.255 的 UDP 广播
- UDP 客户端不会在 esp32 上广播消息
- 如何使用Boost Asio接收到255.255.255.255的UDP广播
- 阅读UDP广播的源地址
- WHy 选择挂起 => 两台 UDP 服务器(广播)
- c++发送UDP广播
- Mac/iOS 无法接收 UDP 广播数据包,但可以发送 UDP 广播数据包
- 使用提升库收听 udp 广播
- 在win10机器上使用winsock的UDP广播不工作
- UDP广播在c++中的实现
- 试图通过udp套接字广播
- 在windows下使用boost::asio进行Udp广播
- 这个boost-asio UDP广播代码如何仅与本地主机一起工作?
- UDP广播在机器上与多个网络适配器在Windows与本机c++
- 2路udp广播问题,borland turbo c++
- 用于 LAN 计算机发现和服务器设置的 UDP 广播
- 无法在无线网络上通过UDP广播进行快速传输