ZBLOG

eprosima::fastdds::dds::DomainParticipantQos qos; // Create a descriptor for the new transport. auto tcp_transport = std::make_shared(); tcp_transport->add_listener_port(5100); tcp_transport->set...

这段代码用于配置eProsima Fast DDS中的一个DomainParticipant,并设置TCPv4传输层的参数,以便在网络中进行数据传输。下面是对每一部分的详细解释:

1. 创建QoS对象

eprosima::fastdds::dds::DomainParticipantQos qos;

创建一个DomainParticipantQos对象,用于配置参与者的质量服务(QoS)属性。

2. 创建传输描述符

auto tcp_transport = std::make_shared<eprosima::fastdds::rtps::TCPv4TransportDescriptor>();
tcp_transport->add_listener_port(5100);
tcp_transport->set_WAN_address("80.80.99.45");
  • TCPv4TransportDescriptor是Fast DDS中用于定义TCP协议的传输层描述符。
  • add_listener_port(5100):将5100端口添加为监听端口,即该参与者将在此端口接收连接请求。
  • set_WAN_address("80.80.99.45"):设置公共WAN地址,使得外部客户端能够通过这个地址与服务器通信。

3. (可选)线程设置配置

tcp_transport->default_reception_threads(eprosima::fastdds::rtps::ThreadSettings{-1, 0, 0, -1});
tcp_transport->set_thread_config_for_port(12345, eprosima::fastdds::rtps::ThreadSettings{-1, 0, 0, -1});
tcp_transport->keep_alive_thread = eprosima::fastdds::rtps::ThreadSettings{-1, 0, 0, -1};
tcp_transport->accept_thread = eprosima::fastdds::rtps::ThreadSettings{-1, 0, 0, -1};

这些行配置了与传输相关的线程设置,包括默认接收线程、特定端口的线程配置以及保持活动和接受连接的线程。这些是可选项,可以根据需要调整以优化性能。

4. 将传输层链接到参与者

qos.transport().user_transports.push_back(tcp_transport);
qos.transport().use_builtin_transports = false;
  • 将刚才创建的TCP传输描述符添加到参与者的用户自定义传输列表中。
  • 设置不使用内置传输,以确保只使用自定义的TCP transport。

5. 设置单播定位器(Locators)

eprosima::fastdds::rtps::Locator_t locator;
locator.kind = LOCATOR_KIND_TCPv4;
// [RECOMMENDED] Use the LAN address of the server
eprosima::fastdds::rtps::IPLocator::setIPv4(locator, "192.168.1.10");
// [ALTERNATIVE] Use server's WAN address.
// eprosima::fastdds::rtps::IPLocator::setIPv4(locator, "80.80.99.45");
eprosima::fastdds::rtps::IPLocator::setPhysicalPort(locator, 5100);
// [OPTIONAL] Logical port default value is 0.
eprosima::fastdds::rtps::IPLocator ::setLogicalPort(locator, 5100);

qos.wire_protocol().builtin.metatrafficUnicastLocatorList.push_back(locator);
qos.wire_protocol().default_unicast_locator_list.push_back(locator);

这里首先定义了一个单播定位器,并指定它为TCPv4类型。可以选择使用LAN地址或WAN地址:

  • 推荐:使用局域网地址(如”192.168.1.10”),适合同一局域网内通信。
  • 替代:使用公共WAN地址(如”80.80.99.45”),适合需要跨越广域网进行通信时使用,但要确保初始对等体仅通过此WAN地址进行连接。

然后设置物理和逻辑端口,并将其添加到QoS对象中,以便Fast DDS在建立连接时知道如何找到这个参与者。

为什么用两个IP地址?

  • LAN地址:通常在本地网络中通信,适合在同一局域网中的设备间进行低延迟、高速的数据交换。如果两个节点都在同一网络上,则优先选择LAN IP,这样可以避免不必要的网络延迟。

  • WAN地址:当设备位于不同网络或需要从外部访问时,需要使用公用IP(WAN IP)。例如,如果有远程客户端希望与服务器交互,而不是通过内部网络,则必须使用WAN IP。同时,由于路由和防火墙的问题,某些情况下可能只允许特定公网IP进行访问,所以会要求将初始对等体配置成指向这个公用IP。

总之,提供两种选择可以灵活应对不同的网络环境需求。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=7257

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?