首页 > 解决方案 > OpenSplice DDS 订阅者始终不接收数据

问题描述

使用 OpenSplice DDS 时,我有以下情况:

发布者持续发布 DDS 主题实例。订阅者使用 NoOpDataReaderListener 订阅数据,我的测试同时运行发布者和订阅者,订阅者中on_data_available 的 NoOpDataReaderListener 方法使用std::cout. on_subscription_matched我的问题是,即使在每次运行期间都调用了 NoOpDataReaderListener 方法,表明发布者和订阅者匹配成功,但在多次运行测试时,数据并没有一直打印出来。但on_data_available并不总是打印出数据内容。

std::cout即使我用<<替换 on_data_available 中打印的数据内容data do come in,该消息也不会一直出现,可能只有 10 次运行中的 7 次(7 次运行所有 DDS 样本可以从订阅者看到,另外 3 次运行没有 DDS 样本出现完全从订阅者中退出)。所以我认为这更多地与 DDS 问题有关,而不是 std out 没有被清除。有谁知道或如何诊断 DDS 通信通道问题?

使用wireshark的更多信息,我观察到以下内容:

看起来运行是否成功(订阅者成功从发布者获取数据)取决于发布者进程中的用户单播端口是否可以将数据(RTPS DATA 而不仅仅是 RTPS 心跳)发送到用户多播定位器(239.255.0.1::multicast_port)在订阅者进程中。

标签: data-distribution-service

解决方案


推荐阅读