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

How to read data from SOME/IP protocol in C++

目前我正在使用 boost udp 套接字读取一些数据。我这样创建了套接字

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::endpoint senderEndpoint;
buffer = std::make_unique<std::array<char, 100>>;

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

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

我希望将来这会为某些人提供一些起点。