
1.DDS中的几个概念域Domain通讯域或是工作空间。话题Topic数据交换的主题。参与者participant发布者publisher)和订阅者subsciber)的载体。2.domainIDdomainID是域的唯一标识。只有相同domainID的参与者才能相互发现和通讯。在同一个域中主题是唯一的只有主题相同的参与者才能相互通讯。在同一域中参与者的GUID是唯一的。3.参与者之间的相互发现和通讯3.1发现只有处于同一域中即相同的domainID, 才能相互发现。3.2通讯(数据交换: 只有相同的主题才能进行数据交换。4.端口port。源码中的端口号计算:/** * Get a multicast port based on the domain ID. * * param domainId Domain ID. * return Multicast port */ inline uint32_t getMulticastPort( uint32_t domainId) const { uint32_t port portBase domainIDGain * domainId offsetd0; return port; } /** * Get a unicast port based on the domain ID and the participant ID. * * param domainId Domain ID. * param RTPSParticipantID Participant ID. * return Unicast port */ inline uint32_t getUnicastPort( uint32_t domainId, uint32_t RTPSParticipantID) const { uint32_t port portBase domainIDGain * domainId offsetd1 participantIDGain * RTPSParticipantID; return port; } /** * Get a discovery server port based on the domain ID. * * param domainId Domain ID. * return Discovery server port */ inline uint16_t get_discovery_server_port( uint32_t domainId) const { uint32_t port portBase domainIDGain * domainId offsetd4; return static_castuint16_t(port); }5.当端口号冲突时可以使用这两个函数修改默认端口号1void RTPSParticipantImpl::setup_user_traffic() default_unicast_port_ metatraffic_unicast_port_ m_att.port.offsetd3 - m_att.port.offsetd1;2Locator_t RTPSParticipantImpl::applyLocatorAdaptRule(Locator_t loc)uint16_t delta m_att.port.participantIDGain;if (metatraffic_unicast_port_ loc.port){metatraffic_unicast_port_ delta;std::cout applyLocatorAdaptRule metatraffic_unicast_port_. metatraffic_unicast_port_ std::endl;}else if (default_unicast_port_ loc.port){default_unicast_port_ delta;}loc.port delta;return loc;6.domainID的比较 、topic 名称的比较domain ID 通过函数bool PDPListener::check_discovery_conditions(ParticipantProxyData participant_data)进行比较。topic 名称 通过函数bool EDP::valid_matching(const WriterProxyData* wdata,const ReaderProxyData* rdata,MatchingFailureMask reason,fastdds::dds::PolicyMask incompatible_qos)进行比较