我正在使用RTI DDS 5.2.3.17
并希望获取DataWriter/Publisher
添加到某些日志消息的 IP 地址。
我将如何去做这件事我在形成要做什么的逻辑时遇到了一些麻烦?
我正在使用RTI DDS 5.2.3.17
并希望获取DataWriter/Publisher
添加到某些日志消息的 IP 地址。
我将如何去做这件事我在形成要做什么的逻辑时遇到了一些麻烦?
无法以标准化方式访问 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 时中断。
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()中获取这些定位器。