OpenHarmony网络协议通信—kcp

news2024/9/20 2:53:31

kcp 是一种 ARQ 协议,可解决在网络拥堵情况下 tcp 协议的网络速度慢的问题

下载安装

直接在 OpenHarmony-SIG 仓中搜索 kcp 并下载。

使用说明

准备一套完整的 OpenHarmony 3.1 Beta 代码

  1. 库代码存放路径:./third_party/kcp

  2. 修改添加依赖的编译脚本

在/developtools/bytrace_standard/ohos.build 文件中添加以下修改:

{
  "subsystem": "developtools",
  "parts": {
    "bytrace_standard": {
      "module_list": [
        "//developtools/bytrace_standard/interfaces/innerkits/native:bytrace_core",
        "//developtools/bytrace_standard/bin:bytrace_target",
        "//developtools/bytrace_standard/bin:bytrace.cfg",
        "//developtools/bytrace_standard/interfaces/kits/js/napi:bytrace",
        "//third_party/kcp:kcp_targets"
      ],
      "inner_kits": [
        {
          "type": "so",
          "name": "//developtools/bytrace_standard/interfaces/innerkits/native:bytrace_core",
          "header": {
            "header_files": [
              "bytrace.h"
            ],
            "header_base": "//developtools/bytrace_standard/interfaces/innerkits/native/include"
          }
        }
      ],
       "test_list": [
        "//developtools/bytrace_standard/bin/test:unittest"
      ]
    }
  }
}
  1. 用命令 ./build.sh --product-name rk3568 --ccache 编译

  2. 生成库文件路径:

    out/rk3568/common/common

该路径会生成 test 可执行文件

接口说明

  1. 接收到下层协议 UDP 传进来的数据底层数据 buffer 转换成 kcp 的数据包格式 int ikcp_input(ikcpcb *kcp, const char *data, long size) KCP 报文分为 ACK 报文、数据报文、探测窗口报文、响应窗口报文四种。 kcp 报文的 una 字段(snd_una:第一个未确认的包)表示对端希望接收的下一个 kcp 包序号,也就是说明接收端已经收到了所有小于 una 序号的 kcp 包。解析 una 字段后需要把发送缓冲区里面包序号小于 una 的包全部丢弃掉

  2. 用户层面的数据读取

ikcp_recv(ikcpcb *kcp, char *buffer, int len)

首先合并 fragment,如果 rcv_queue 小于 rcv_wnd(接收窗口大小),则将 rcv_buf 中合适的 segment 放入 rcv_queue 中

  1. 将 buffer 中的数据发送,把要发送的 buffer 分片成 KCP 的数据包格式,插入待发送队列中

ikcp_send(ikcpcb *kcp, const char *buffer, int len)

当用户的数据超过一个 mss(最大分片大小)的时候,会对发送的数据进行分片处理。KCP 采用的是流的方式进行分片处理

如果需要发送的数据大小大于 mss,则将其拆分为多个 segment 发送,将其 frg 至为其相应的序号,序号从 count-1 开始递减至 0,即 count-1 表示第一个 segment,0 表示最后一个 segment。

  1. 刷新待处理数据,待处理数据包括 ack,win probe,push data 等等,以及检测 snd_buf 中的数据是否需要重传

ikcp_flush(ikcpcb *kcp)

约束与限制

在下述版本验证通过:DevEco Studio: 3.1 Beta1,OpenHarmony SDK: API9。

目录结构

|---- kcp
|     |---- ikcp.c   #kcp的主要实现逻辑
|     |---- test.c   #测试代码文件
|     |---- screenshot   #测试结果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1612178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客NC251 多数组第 K 小数【 中等 双指针 C++、Java、Go】

题目 题目链接: https://www.nowcoder.com/practice/41796daa4c7e4e5ab984b2c16c24a1de 思路 双指针参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** param arr1 int整…

【python】深度解剖!一文搞懂字符串常用功能

【python】深度解剖!一文搞懂字符串常用功能 【先赞后看养成习惯】求点赞+关注+收藏😀 目录 【python】深度解剖!一文搞懂字符串常用功能字符串的创建:字符串的格式化——占位符.format方法字符串的分割字符串的连接字符串的重复字符串的大小写转换字符串的判断字符串的…

STL分解

效果图 ref:时序数据分析的利器——STL分解 - 知乎 (zhihu.com)

linux18:进程等待

进程等待的必要性 1:子进程创建的目的是要完成父进程指派的某个任务,当子进程运行完毕退出时,父进程需要通过进程等待的方式,回收子进程资源,获取子进程退出信息(子进程有无异常?没有异常结果是…

Cpp_SDay02

空山新雨后,天气晚来春 文章目录 前言一、No File!!!二、preProcessing三、static的用意:四、signed number /unsigned number五、函数六、#pragma once总结 前言 看视频令人犯困, 一、No File&#xff01…

Vue3基本功能介绍

文章目录 Vue3组件中的模板结构可以没有根标签div组合式APIRefReactive函数回顾Vue2响应式Vue3实现响应式对比reactive和refSetup注意点计算属性与监听computedWatchWatchEffectVue3生命周期自定义hook函数toRef其他组合APIshallowReactiveshallowRefreadonly和shallowOnlyToRa…

SRIO系列-时钟逻辑与复位逻辑

一、前言 上一篇讲述了SRIO协议的基本概念,传输的HELLO帧格式、事务类型等,本篇说一下SRIO IP核的时钟关系。 基本的IP设置可以参考此篇文章:【高速接口-RapidIO】Xilinx SRIO IP 核详解-CSDN博客 二、时钟关系 PHY可以在两个时钟域上运行…

ubuntu下boa服务器编译运行

一.下载boa源码并解压 官网网站:BOA源码 点击箭头所指的位置即可下载 解压: tar -xvf boa-0.94.13.tar.gz 解压完成得到目录: 二.安装环境所缺依赖,否则编译会报错 sudo apt install bison sudo apt install flex 三.编译 1…

vue快速入门(三十五)组件通信-父传子

注释很详细&#xff0c;直接上代码 上一篇 新增内容 父组件传值子组件接收父组件传来的数据 源码 App.vue <template><div id"app"><!-- :item"item"为将item的值传递给MyTest组件 --><MyTest v-for"item in roles" :key&q…

【Linux开发 第七篇】权限

权限 Linux组权限修改权限 Linux组 在linux中的每个用户必须属于一个组&#xff0c;不能独立于组外 文件/目录 所有者 一般为文件的创建者&#xff0c;谁创建了该文件&#xff0c;就自然的成为了该文件的所有者 这一列即为文件的所有者 修改文件的所有者&#xff1a; chown…

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 一、检查服务是否开启 找到 【Docker Desktop Service】&#xff0c;然后&#xff0c;启动他&#xff1b; 你也可以直接设置为“自动” 找到服务&#xff0c;右键》属性》启动类型&#xff1a;自动》点击…

经典目标检测YOLOV1模型的训练及验证

1、前期准备 准备好目录结构、数据集和关于YOLOv1的基础认知 1.1 创建目录结构 自己创建项目目录结构&#xff0c;结构目录如下&#xff1a; network CNN Backbone 存放位置 weights 权重存放的位置 test_images 测试用的图…

Java多线程并发八股问题总结

目录 (1).Java中实现线程的方法(2).如何停止一个正在运行的线程(3).notify和notifyAll有什么区别(4).sleep()和wait()有什么区别(5).volatile是什么&#xff1f;可以保证有序性吗&#xff1f;(6).Thread类中的start()和run方法有什么区别&#xff1f;(7).为什么wait、notify、n…

面试经典150题——跳跃游戏 II

面试经典150题 day10 题目来源我的题解方法一 动态规划方法二 贪心 题目来源 力扣每日一题&#xff1b;题序&#xff1a;45 我的题解 方法一 动态规划 动态规划&#xff0c;当j位置可达i位置时&#xff1a;dp[i]Math.min(dp[i],dp[j]1); 时间复杂度&#xff1a;O( n 2 n^2 n…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月21日,星期日

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年4月21日 星期日 农历三月十三 1、 商务部等10部门联合发文&#xff1a;进一步支持境外机构投资境内科技型企业。 2、 第二艘国产大型邮轮下坞搭载建造&#xff0c;预计2026年底前交付&#xff0c;中国邮轮开启批量化建造…

Python-VBA函数之旅-hash函数

目录 一、hash函数的定义&#xff1a; 二、hash函数的工作方式&#xff1a; ​三、hash函数的优缺点&#xff1a; 四、hash函数的常见应用场景&#xff1a; 1、hash函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&…

Efficient Subclass Segmentation in Medical Images论文速读

Efficient Subclass Segmentation in Medical Images 摘要 随着医学图像分析的研究兴趣越来越细化&#xff0c;大量注释的成本也在上升。降低成本的一种可行方法是使用粗粒度超类标签进行注释&#xff0c;同时使用有限的细粒度注释作为补充。通过这种方式&#xff0c;细粒度的…

BAPI_BATCH_CHANGE:修改批次的特征值

文章目录 BAPI_BATCH_CHANGE&#xff1a;修改批次的特征值实现步骤定义变量获取对象/类等 获取已维护特性值新特性值更新 注意事项最终效果字段介绍 BAPI_BATCH_CHANGE&#xff1a;修改批次的特征值 现在有一个需求是要修改批次里面的某一个特征值&#xff0c;所以需要使用到B…

带头循环双向链表专题

1. 双向链表的结构 带头链表⾥的头节点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位节点不存储任何有效元素&#xff0c;只是站在这⾥“放哨 的” “哨兵位”存在的意义&#xff1a; 遍历循环链表避免死循环。 2. 双向链表的实现 2.1双向链表结构 typedef int DataTyp…

适合各大资源网投稿html源码

源码介绍 适合各大资源网投稿html源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果预览 源码下载 适合各大资源…