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



当前我使用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库
它允许您从网络流量中提取原始UDP数据
以下是更详细的教程:libtins嗅探教程
当然,稍后您将不得不从这样的包中提取数据。这可能比读取它更复杂,因为所有数据都必须以二进制形式解码
以下是一些/IP文档:AUTOSAR Some/IP

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

最新更新