2

我正在使用RTI DDS 5.2.3.17并希望获取DataWriter/Publisher添加到某些日志消息的 IP 地址。

我将如何去做这件事我在形成要做什么的逻辑时遇到了一些麻烦?

4

2 回答 2

2

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

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

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

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

于 2018-04-02T13:53:31.890 回答
1

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字段中获取这些定位器,您也可以从 SampleInfo 调用get_matched_publication_data()中获取这些定位器。

于 2018-04-08T06:50:02.050 回答