如何用C++读取SOME/IP协议数据

问题描述 投票:0回答:2

目前我使用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和端口?

c++ sockets udp ip autosar
2个回答
0
投票

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

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


0
投票

同时,vsomeip 有一个 wiki,我觉得非常有用: 它展示了如何设置操作系统并通过 json 文件使用特定的 IP 地址。当两个网络端口之间进行通信时,json 文件特别有用(!)。我强调后者,因为如果一个计算机有两个网络端口,那么可以测试这两个“节点”之间的通信。

无论如何,它可以帮助您通过配置SOME/IP服务来“从SOME/IP读取数据”。当然,配置的服务必须由某人提供并且在您的网络上可用。我使用两个设备之间的章节通信来玩它。我用 Wireshark 仔细检查了数据的样子。 因此“读取某些/IP数据”是使用服务和方法来执行的

© www.soinside.com 2019 - 2024. All rights reserved.