OpenDDS:如何通过公共网络(WAN)与两台主机通信

时间:2017-08-04 08:10:55

标签: networking data-distribution-service wan opendds

Rcently,我成功地通过OpenDDS在同一子网中通信了两台主机。 但是,我想通过公共网络或WAN与其他两台主机通信。它不起作用。 我怎样才能解决这个问题?

这是我的沟通环境:

我有两个主机。 HostA是AWS(亚马逊网络服务),主机B是我的Destktop。此外,两台主机具有公共IP地址并禁用防火墙。我已经检查了telnet命令是否提供了特定的端口号。像这样:

$ telnet <HostA IP's> 12345

这是很好的联系。

我使用了OpenDDS-3.11和$OpenDDS_HOME/tests/DCPS/Messenger的例子。

在HostA中,启用

$ DCPSInfoRepo -ORBListenEndpoints iiop://:12345

订阅者的运作方式如下:

$ ./subscriber -DCPSConfigFile sub_multicast.ini

在HostB中,

目录是相同的子系统,然后发布者的运作方式如下:

$ ./publisher -DCPSInfoRepo <HostA's IP>:12345 -DCPSConfigFile pub_multicast.ini

Publisher的返回错误消息:

$ ./publisher -DCPSInfoRepo <HostA' IP>:12345 -DCPSConfigFile pub_multicast.ini
Starting publisher
(3074|140050504111936) NOTICE: using DCPSInfoRepo value from command option (overrides value if it's in config file).
Starting publisher with 1 args
(3074|140050504111936) EXCEPTION, ERROR: InfoRepoDiscovery::get_dcps_info: failed to resolve ior -
system exception, ID 'IDL:omg.org/CORBA/TRANSIENT:1.0'
OMG minor code (2), described as 'No usable profile in IOR.', completed = NO

(3074|140050504111936) ERROR: DomainParticipantFactoryImpl::create_participant, add_domain_participant returned invalid id.
publisher.cpp:66: main() ERROR: create_participant failed!
ERROR: InfoRepoDiscovery::~InfoRepoDiscovery - Exception caught during ORB shutdown: system exception, ID 'IDL:omg.org/CORBA/BAD_INV_ORDER:1.0'
OMG minor code (4), described as 'ORB has shutdown.', completed = NO

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我对同一个问题很感兴趣。我想从AWS到我的应用程序进行类似的运行。

目前使用websocket来弥补路由器的Nat问题。我在本地网络中运行dcpsInfoRepo。但我在不同子网的设备中发现了问题。我不确定所有路由器都支持多播。所以使用tcp连接。

答案 1 :(得分:0)

我终于解决了我的问题 只需更改Discovery服务器主机并使用rtps_uni.ini文件即可。 像这样:

DCPSInfoRepo -ORBListenEndpoints iiop://:12345

订户方:

./subscriber -DCPSDebugLevel=5 -DCPSInfoRepo HostA:12345 -DCPSConfigFile rtps_uni.ini

发布商方:

 ./publisher -DCPSInfoRepo HostA:12345 -DCPSConfigFile rtps_uni.ini