【发布时间】:2018-04-02 11:45:37
【问题描述】:
我正在使用RTI DDS 5.2.3.17 并想获取DataWriter/Publisher 的IP 地址以添加到一些日志消息中。
我该怎么做?我在形成要做什么的逻辑时遇到了一些麻烦?
【问题讨论】:
标签: ip publish-subscribe data-distribution-service datawriter
我正在使用RTI DDS 5.2.3.17 并想获取DataWriter/Publisher 的IP 地址以添加到一些日志消息中。
我该怎么做?我在形成要做什么的逻辑时遇到了一些麻烦?
【问题讨论】:
标签: ip publish-subscribe data-distribution-service datawriter
无法以标准化方式访问 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
DataWriter GUID 不是获取 DomainParticipant 的 IP 地址的可靠方法。较新版本的 Connext DDS 不再根据 IP 地址或主机 ID 构造 GUID_t。
正确的方法是查看拥有该 DataWriter 的 DomainParticipant 的 ParticipantBultinTopicData。 default_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 中获取这些定位器。
【讨论】: