连接到 DDS 中的主机:是不是有网络?

Posted

技术标签:

【中文标题】连接到 DDS 中的主机:是不是有网络?【英文标题】:Connect to host in DDS: Is there networking at all?连接到 DDS 中的主机:是否有网络? 【发布时间】:2017-01-31 14:31:42 【问题描述】:

我正在尝试了解 DDS 并学习它。我一直在这里和那里阅读有关 OpenSplice DDS 的教程,那里有些东西让我感到困惑。

在本教程中,导师在第 8 页提到了某种“魔法”,即发布者和订阅者在自动检测参与者的情况下解耦。

但是如果我在另一台计算机上有一个参与者怎么办?或者也许在另一个国家?

看看这个发布者的例子:

dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
dds::DataWriter<TempSensorType> dw(tsTopic);
TempSensorTypets = 1, 26.0F, 70.0F, CELSIUS;
dw.write(ts);

还有这个订阅者的例子:

dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
dds::DataReader<TempSensorType> dr(tsTopic);
dds::SampleInfoSeq info;TempSensorSeq data;
while (true) 
   dr.read(data, info);
    for (inti =0; i < data.length(); ++i)
        std::cout << data[i] << std::endl;sleep(1);

和this full working example of both(tspub.cpp 是发布者,tssub.cpp 是订阅者),我不明白人们如何远程连接。如何订阅另一台机器?我怎样才能让这个漂亮而简单的示例远程工作?

如果您需要更多信息或详细信息,请询问。

【问题讨论】:

【参考方案1】:

参与者通过 UDP 多播相互连接 - 请记住,标准中对此进行了描述,因此要全面了解,请阅读该内容。它是免费提供的。

规范中只定义了 UDP,所以如果他们使用替代的连接策略(shmem、TCP、其他),那么它将取决于供应商。 RTI 实现不会通过 shmem 与 OpenSplice 实现通信(但它们可以通过 UDP 环回)。

有一个从已知 UDP 端口开始的协商。

如果两个系统在同一个子网上,并且启用了多播,它们将通过标准中描述的魔法进行连接。这假设它们具有兼容的域 ID、主题、类型和 QoS。

真的:阅读标准。

【讨论】:

以上是关于连接到 DDS 中的主机:是不是有网络?的主要内容,如果未能解决你的问题,请参考以下文章

vm中的nat模式不能连接到主机,以及不能上网

连接到 ssh 远程主机(在 *** 网络中)超时

DDS 通信是不是可以在不同网络中的两台计算机之间进行?

ssh:连接到主机 gitlab.com 端口 22:网络不可达

redis 尝试连接到 Heroku 中的本地主机 - 为啥?

通过主机名连接到 Java 套接字