在RTI DDS上获取DataWriter / Publisher的IP地址?

时间:2018-04-02 11:45:38

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

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

我将如何做到这一点我在形成做什么的逻辑上遇到了一些麻烦?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分: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地址(Locators)。 DataWriter可以覆盖它们并提供不同的集合(通常是子集)。如果您只想提供日志记录,这可能无关紧要。但是,如果您想查看DataWriter是否使用了一组不同的定位器,您还可以从unicast_locators中的PublicationBuiltinTopicData字段中获取这些字段,您也可以从SampleInfo调用get_matched_publication_data()获取这些字段。