数据分发服务通信故障看这一篇就够了

在这里插入图片描述

通常情况下,如果ping不能在网络上正常工作,那么DDS通信也不能正常工作。

还有其他几个可能的原因会导致DDS不能正常通信:

  • 发现列表

要让两个应用程序进行通信,每个应用程序都需要将对方加入到自己发现的列表中,如果不加入,则会忽略掉对方节点。

  • QoS冲突

要查看发布者和订阅者的QoS设置是否冲突,可以通过给发布者或者订阅者设置回监听器,在监听掩码中设置DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS和DDS_OFFERED_INCOMPATIBLE_QOS_STATUS。如果QoS存在冲突,则会出触发回掉函数。status参数还会告诉你冲突的QoS类别。

  • 防火墙

如果两台机器之间有防火墙,DDS也可能无法通信,因为防火墙不允许DDS所需的UDP端口上的数据包通过防火墙。关闭防火墙或修改配置以允许所需的端口将启用通信。如果需要组播通信,例如在缺省的发现对等体配置中,必须确保正在使用的组播组也由防火墙转发。

  • 网络地址转换(NAT)

如果两台机器之间存在NAT, DDS将无法通信,因为NAT将更改主机IP和端口号。要解决这个问题,请确保需要通过NAT(作为发布者或订阅者)与主机通信的任何机器的地址都可以通过NAT进行路由。如果需要多播通信,例如在默认的发现配置中,您必须确保正在使用的多播组也被路由器转发;即使在这种情况下,一些通信仍然需要可路由单播地址。

  • 未能发现

如果主机A有多个网卡,主机B知道如何将流量路由到某个接口,则应该通过配置传输属性来禁用不可路由的接口。否则,主机A可能会选择一个不可路由的地址进行发现,从而导致两台机器无法通信。

猜你喜欢

转载自blog.csdn.net/Tom942067059/article/details/120816911