获取DomainParticipant的IP地址的DataWriter GUID不是一种可靠的方法。更新版本的Connext DDS不再从IP地址或主机ID构造GUID_t。
正确的方法是看看 ParticipantBultinTopicData 拥有该DataWriter的DomainParticipant。场 default_unicast_locators 包含DomainParticipant的IP地址。
您可以获取拥有DataWriter的DomainParticipant的ParticipantBultinTopicData,该DataWriter从 SampleInfo 。要做这个电话 get_matched_publication_participant_data() 在DataReader上传递 publication_handle 在SampleInfo中找到。
请注意,上面的内容为您提供拥有DataWriter的DomainParticipant的IP地址(Locators)。 DataWriter可以覆盖它们并提供不同的集合(通常是子集)。如果您只想提供日志记录,这可能无关紧要。但是如果你想看看DataWriter是否使用了一组不同的定位器,你也可以从中获取 unicast_locators 在该领域 PublicationBuiltinTopicData 您也可以从SampleInfo调用中获取 get_matched_publication_data() 。
无法以标准化方式访问DataWriter的IP地址。但是,RTI Context实现默认使用IP地址作为每个Entity的全局唯一标识符(GUID)的一部分。
您可以在RTI知识库文章中找到有关GUID以及如何访问它们的更多信息 访问Connext DDS实体的GUID 。通常,IP地址在GUID的前4个字节中捕获,表示为 rtps_host_id 在里面 DDS_GUID_t 图。
rtps_host_id
DDS_GUID_t
您没有详细解释您的情况,但如果您碰巧有来自DataWriter的数据,您也可以利用 SampleInfo 随数据一起提供。它有一个叫做的字段 source_guid 。
source_guid
所有这一切都假设您正在寻找IPv4地址。另请注意,这不是一个公开的机制,因此将来可能会发生变化。在您的应用程序显式设置其GUID的那一刻,所有这些都会中断。