【问题标题】:How to read data from SOME/IP protocol in C++如何在 C++ 中从 SOME/IP 协议读取数据
【发布时间】:2021-01-10 23:08:37
【问题描述】:

目前我使用 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++ 中从 SOME/IP 协议中读取数据。我将不胜感激任何可以提供帮助的建议——不仅仅是纯代码。链接到教程,任何东西。
  • 这个问题太笼统了,答案是:找个库或者自己实现协议。
  • 好的。然后我会缩小范围:您知道在这种情况下可以使用的任何库吗?我想避免执行此协议。
  • 关于库的问题在 Stack Overflow 上是题外话。

标签: c++ sockets udp ip autosar


【解决方案1】:

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

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

【讨论】:

  • 您的链接比较旧,这里是 R19-11 规范链接:https://www.autosar.org/fileadmin/user_upload/standards/foundation/19-11/AUTOSAR_PRS_SOMEIPProtocol.pdfhttps://www.autosar.org/fileadmin/user_upload/standards/foundation/19-11/AUTOSAR_PRS_SOMEIPServiceDiscoveryProtocol.pdf
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
相关资源
最近更新 更多