当前位置: 首页 > news >正文

Fastdds中的端口号计算

源代码路径在端口参数的头文件 PortParameters.h

参数分析:

  • portBase:基端口号,默认值为 7400(符合 OMG RTPS 规范)。
  • domainIDGain:域增量,默认值为 250,用于区分不同 Domain ID 的端口。
  • participantIDGain:参与者增量,默认值为 2,用于区分同一域内不同参与者的端口。
  • offsetd0:组播发现端口的偏移量,默认值为 0。
  • offsetd1:单播发现端口的偏移量,默认值为 10。
  • offsetd2:组播用户数据端口的偏移量,默认值为 1。
  • offsetd3:单播用户数据端口的偏移量,默认值为 11。

这些默认值遵循 OMG RTPS 规范,确保不同域和参与者之间的端口分配通常不会冲突。

  • 根据 Domain ID 计算组播发现端口号
  • port = portBase + domainIDGain * domainId + offsetd0
  • 使用默认值(portBase = 7400, domainIDGain = 250, offsetd0 = 0):
    • 对于 DomainID = 1,端口 = 7400 + 250 * 1 = 7650。
    • 对于 DomainID = 0,端口 = 7400。
  • 端口检查:如果计算出的端口号超过 65535(TCP/UDP 端口上限),记录错误日志并退出程序,提示 Domain ID 或基端口号可能过大。
  • 根据 Domain ID 和 Participant ID 计算单播发现端口号。
  • 公式

    port = portBase + domainIDGain * domainId + offsetd1 + participantIDGain * RTPSParticipantID

    • 使用默认值(portBase = 7400, domainIDGain = 250, offsetd1 = 10, participantIDGain = 2):
      • 对于 DomainID = 0,ParticipantID = 0,端口 = 7400 + 0 + 10 + 2 * 0 = 7410。
      • 对于 DomainID = 0,ParticipantID = 1,端口 = 7400 + 0 + 10 + 2 * 1 = 7412。
  • 端口检查:同组播端口,检查端口号是否超过 65535,超限时记录错误并退出。
  1. 端口号计算
    • PortParameters 类用于 FastDDS 的 RTPS 协议实现,自动为 DDS 参与者分配组播和单播端口。
    • 组播端口用于发现阶段的广播消息,单播端口用于参与者之间的点对点通信。
  2. 避免端口冲突
    • 通过 domainIDGain 和 participantIDGain,确保不同 Domain ID 和 Participant ID 的端口号唯一。
    • 例如,DomainID = 0 的参与者使用 7410、7412 等端口,而 DomainID = 1 的参与者使用 7660、7662 等端口。
  3. 错误处理
    • 如果端口号超过 65535,程序会终止并输出错误信息,提示用户检查 Domain ID 或端口配置。
http://www.dtcms.com/a/293655.html

相关文章:

  • 基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(下)
  • 在React中,函数式组件和类组件各有优缺点
  • 射频信号(大宽高比)时频图目标检测anchors配置(下)
  • 分布式任务调度实战:XXL-JOB与Elastic-Job深度解析
  • ZKmall开源商城微服务架构实战:Java 商城系统的模块化拆分与通信之道
  • 【音视频学习】五、深入解析视频技术中的像素格式:颜色空间、位深度、存储布局
  • TR-FRET(时间分辨荧光能量共振转移)在药物研发中的热门应用简介
  • 【解决vmware ubuntu不小心删boot分区,进不去系统】
  • 在 Ubuntu 上将 Docker 降级到版本 25.0.5 (二) 降低版本,涉及兼容性问题
  • 在离线 Ubuntu 22.04机器上运行 ddkj_portainer-cn 镜像 其他相关操作也可以复刻 docker
  • centos 配置docker
  • java通过com进行pdf转换docx丢失
  • mongodb的备份和还原(精简)
  • LeetCode11~20题解
  • Visual Studio中部署PaddleOCRv5 (借助ncnn框架)
  • 如何Visual Studio 的配置从 Qt-Debug 切换到 x64-Debug
  • ESP32的ADF详解:5. Streams的API
  • 聊聊 Flutter 在 iOS 真机 Debug 运行出现 Timed out *** to update 的问题
  • GEMINUS 和 Move to Understand a 3D Scene
  • Redis的key过期策略
  • 4.3 激活函数的目的
  • LLM 幻觉一般是由于什么产生的,在模型什么部位产生
  • 计算机组成原理——数据的表示和运算2
  • 手机开启16k Page Size
  • J2EE模式---服务定位器模式
  • JavaEE Spring框架的概述与对比无框架下的优势
  • 关于原车一键启动升级手机控车的核心信息及注意事项
  • 第五章第一节 EXTI 外部中断
  • Adobe全系列下载 官方原版补丁
  • 【Spark征服之路-3.8-Spark-SQL核心编程(七)】