如何从C ++中的SOME / IP协议读取数据

问题描述

当前,我使用boost udp套接字读取一些数据。我创建了这样的套接

DataSnapshot

其中

read_socket = new udp::socket(read_socket_service,udp_listener_endpoint);

然后我获取数据

boost::asio::io_service read_socket_service();
udp::endpoint udp_listener_endpoint(some_ip,some_port);

其中

 read_socket->receive_from(boost::asio::buffer(*buffer),senderEndpoint);

如果使用UDP解决了数据包生成器和数据包接收器之间的通信,则此方法有效。
但是现在我有了使用SOME / IP协议进行通讯的真实设备。我在Wireshark中看到一些数据包从设备移动到我的应用程序环境,但我完全不知道如何从这些数据包中获取数据。
当我使用boost udp时,它表明我已建立连接,但缓冲区仍然为空。
我发现了类似https://github.com/GENIVI/vsomeip内容,并将其包含在我的项目中,但是我真的不知道如何使用它,因为文档甚至都没有指出如何连接到特定的IP。
还是在这种情况下,我不应该使用任何IP和端口?

解决方法

一种可能的解决方案是使用libtins library
它允许您从网络流量中提取原始UDP数据。
这里是更详细的教程: libtins sniffing tutorial
当然,稍后您将不得不从此类程序包中提取数据。这可能比读取它要复杂得多,因为所有数据都必须从二进制解码。
这是Some / IP文档: AUTOSAR Some/IP

我希望将来这会给某人一些起点。