ZBLOG

To set up a Server-Client configuration you need to create an instance of TCPv4TransportDescriptor (for TCPv4) or TCPv6TransportDescriptor (for TCPv6), and add it to the user transport list of the DomainParticipant. Depending on the TCP transport...

在设置服务器-客户端配置时,需要创建一个 TCPv4TransportDescriptor(用于 TCPv4)或 TCPv6TransportDescriptor(用于 TCPv6)的实例,并将其添加到 DomainParticipant 的用户传输列表中。根据 TCP 传输描述符的设置和定义的网络定位器,DomainParticipant 可以作为 TCP 服务器或 TCP 客户端工作。

TCP 服务器

如果在描述符中提供了 listening_ports,则 DomainParticipant 将充当 TCP 服务器,监听来自远程连接的请求。以下是 C++ 代码和 XML 文件中的示例:

C++ 示例:

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

// 创建新传输的描述符
auto tcp_transport = std::make_shared<eprosima::fastdds::rtps::TCPv4TransportDescriptor>();
tcp_transport->add_listener_port(5100); // 设置监听端口

// [可选] 配置线程设置
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};

// 将传输层链接到参与者
qos.transport().user_transports.push_back(tcp_transport);

// 禁用默认传输
qos.transport().use_builtin_transports = false;

// [可选] 设置单播定位器
eprosima::fastdds::rtps::Locator_t locator;
locator.kind = LOCATOR_KIND_TCPv4;
eprosima::fastdds::rtps::IPLocator::setIPv4(locator, "192.168.1.10");
eprosima::fastdds::rtps::IPLocator::setPhysicalPort(locator, 5100);
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);

TCP 客户端

如果向 DomainParticipant 提供 initialPeersList,它将作为 TCP 客户端尝试连接到给定地址和端口的远程服务器。以下是 C++ 和 XML 文件中的示例:

C++ 示例:

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

// 禁用内置传输层
qos.transport().use_builtin_transports = false;

// 创建新传输的描述符,不配置任何监听端口
auto tcp_transport = std::make_shared<eprosima::fastdds::rtps::TCPv4TransportDescriptor>();
qos.transport().user_transports.push_back(tcp_transport);

// [可选] 配置线程设置
tcp_transport->default_reception_threads(eprosima::fastdds://{ ThreadSettings{-1 , 0 , 0 ,-1} });
tcp_transport->set_thread_config_for_port(12345,e prosima :: fast dds :: rtps :: ThreadSettings {-1 , 0 , 0 ,-1 });
tcp_transport -> keep_alive_thread = e prosima :: fast dds :: rtps :: ThreadSettings {-1 , + the role } ; // [-目标位置}


transport ) ;






// 设置初始对等体。
e pros ima : : fast dds : : rt p s : : Locator_t initial_peer_locator;
initial_peer_locator.kind=LOCATOR_KIND_TCPV4;
e pros ima: : fast dds: : r t ps: IP Locator :: setIPv4(initial_peer_locator,"192 .168 .10 ");
            
    
 

}



}

注意事项

手动设置单播定位器是可选的。如果不设置它们或将它们与逻辑端口设置为零,则客户端的初始对等体不应设置其逻辑端口(或将其设为零)。否则,初始对等体的逻辑端口必须与服务器的单播逻辑端口匹配。

以上说明展示了如何使用和配置 TCP 传输,以支持复杂的数据交换场景。通过合理配置,可以实现可靠的数据通信。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?