gpt4 book ai didi

c++ - 使用 boost 库收听 udp 广播

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:12 27 4
gpt4 key购买 nike

这似乎是很多人都有的问题,但到目前为止我找到的所有答案都没有帮助。

问题:我正在尝试收听通过 UDP 将其数据包发送到我的电脑的 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 权限运行该程序!

一些想法:当子网掩码为 255.255.255.0 时,boost::asio::ip::address_v4::any() 可能不会监听 IP ..*.255 吗?

使用 netcat 时,也不会显示任何数据。当我使用 Windows netcat 时,它工作得很好。与 Linux 和 Windows 上的 Wireshark 相同 - 工作正常。也尝试了它,但效果相同 - 没有数据。

最佳答案

谢谢大家对我的帮助。代码没问题,但问题出在 velodyne 和它的网络设置方面。

对所有尝试使用 Velodyne 的其他人的解释:

velodyne 有自己的子网 (192.168.17.x)。所有记录的数据现在都通过广播发送到子网 192.168.3.x。在正常情况下应该在该子网中的所有 IP 上接收到数据,但这似乎是不可能的。您可以接收数据的唯一 IP 是 IP 255,如果您使用这两种解决方案之一。(或者使用 windows 或使用 wireshark 转储文件)

<强>1。愚蠢但有效的解决方案

将网关设置为 192.168.3.1。是的,没有,但没关系。从现在开始,您将收到有关 IP 255 的数据。

<强>2。干净的解决方案

设置一条新路由,将所有流量从 velodyne 的子网引导到子网 192.168.3.x。

我真的不知道为什么这么复杂,但我们花了相当长的时间才发现这个“ secret ”。希望你们中的一些人能从我们挑剔的工作中获益。

关于c++ - 使用 boost 库收听 udp 广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766664/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com