【问题标题】:Get IP Address of DataWriter/Publisher on RTI DDS?在 RTI DDS 上获取 DataWriter/Publisher 的 IP 地址?
【发布时间】:2018-04-02 11:45:37
【问题描述】:

我正在使用RTI DDS 5.2.3.17 并想获取DataWriter/Publisher 的IP 地址以添加到一些日志消息中。

我该怎么做?我在形成要做什么的逻辑时遇到了一些麻烦?

【问题讨论】:

    标签: ip publish-subscribe data-distribution-service datawriter


    【解决方案1】:

    无法以标准化方式访问 DataWriter 的 IP 地址。但是,RTI Connext 实现默认使用 IP 地址作为每个实体的全局唯一标识符 (GUID) 的一部分。

    您可以在 RTI 知识库文章Accessing the GUID of Connext DDS Entities 中找到有关 GUID 以及如何访问它们的更多信息。通常,IP 地址在 GUID 的前 4 个字节中捕获,在 DDS_GUID_t 图中由 rtps_host_id 表示。

    您没有详细解释您的情况,但如果您碰巧有来自 DataWriter 的数据,您还可以利用数据随附的SampleInfo。它有一个名为source_guid 的字段。

    所有这些都假设您正在寻找 IPv4 地址。另请注意,这不是公开公开的机制,因此将来可能会发生变化。当您的应用程序显式设置其 GUID 时,所有这些都会中断。

    【讨论】:

    • SampleInfo 得到 source_guid 有效,但是,IP 是 10.0.100.159,我不断得到 10.0.100.-97
    【解决方案2】:

    DataWriter GUID 不是获取 DomainParticipant 的 IP 地址的可靠方法。较新版本的 Connext DDS 不再根据 IP 地址或主机 ID 构造 GUID_t。

    正确的方法是查看拥有该 DataWriter 的 DomainParticipant 的 ParticipantBultinTopicDatadefault_unicast_locators 字段包含 DomainParticipant 的 IP 地址。

    您可以从SampleInfo 获取拥有 DataWriter 的 DomainParticipant 的 ParticipantBultinTopicData。为此,请在 DataReader 上调用 get_matched_publication_participant_data(),传递在 SampleInfo 中找到的 publication_handle

    请注意,以上为您提供了拥有 DataWriter 的 DomainParticipant 的 IP 地址(定位器​​)。 DataWriter 可以覆盖这些并提供不同的集合(通常是子集)。如果您只想提供日志记录,这可能无关紧要。但是,如果您想查看 DataWriter 是否使用不同的定位器集,您还可以从 PublicationBuiltinTopicData 中的 unicast_locators 字段中获取这些定位器,您也可以从调用 get_matched_publication_data() 的 SampleInfo 中获取这些定位器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 2010-11-04
      • 2014-10-01
      • 2011-01-18
      相关资源
      最近更新 更多