opendds两台机器之间无法通信问题解析

opendds两台机器之间无法通信问题解析

网上关于使用opendds自带的例子进行通信的使用说明有很多,主要有这么一篇文章,感觉很好:OpenDDS在两台机器上使用方式

然而,我搭建好环境之后,在两台Linux机器之间使用DCPS的repo.ior方式却怎么也连接不起来,自己尝试重新编译多次opendds,最后均无效果。

最后无奈,只能硬着头皮去一点点分析对比日志,最后终于发现问题所在。
我的实验步骤是这样的:

  • A机器运行DCPSInfoRepo, 生成repo.ior, 复制到B机器。
  • A机器运行publisher
  • B机器运行subscriber

结果发现,subscriber就是无法收到publisher的消息。
通过分析subscriber的日志发现,B机器收到的tcp连接的IP地址是127.0.0.1, 这地址对于B来说是有问题的,因为通过这个地址无法连接到A机器上的。所以为了测试,先删除A机器上/etc/hosts上的关于127.0.0.1的配置。

再次运行publisher和subscriber,仍然有问题,此时发现B机器收到的tcp连接的ip地址是192.168.122.1,而B机器本身的IP地址是192.168.1.8, 所以这根本就不可能连接成功呀。回到A机器一查,A机器的物理有线网卡是192.168.1.9, 但是还有一个虚拟网卡的IP地址是192.168.122.1,这是之前安装virtualbox虚拟机留下来。而不知怎么的,A机器上使用了192.168.122.1来进行通信了,显然与B机器就无法通信了。

于是,禁用此virtualbox网卡,再次进行实验,终于成功啦!

另外还有一个发现,如果A, B机器上配置了hostname, 它们之间一定要同步,因为opendds可能会使用hostname进行tcp通信。即两台机器上/etc/hosts一定要一致,如下:

192.168.1.9 mypad1
192.168.1.8 mypad2

配置hostname时,还是要放在文件开头比较好,因为很多hostname中都是添加了127.0.0.1的设置的。放在开关的ip地址就会被opendds优先使用,这样也能屏蔽前面提到的opendds使用了本地地址的问题。

以上是自己踩过的坑,记之以示有缘人。

猜你喜欢

转载自blog.csdn.net/ygd11/article/details/81538906