鸿蒙原生应用开发-网络管理Socket连接(三)

应用通过TLS Socket进行加密数据传输
开发步骤
客户端TLS Socket流程:
1.import需要的socket模块。

2.绑定服务器IP和端口号。

3.双向认证上传客户端CA证书及数字证书;单向认证只上传CA证书,无需上传客户端证书。

4.创建一个TLSSocket连接,返回一个TLSSocket对象。

5.(可选)订阅TLSSocket相关的订阅事件。
6.发送数据。

7.TLSSocket连接使用完毕后,主动关闭。

// 创建一个(双向认证)TLS Socket连接,返回一个TLS Socket对象。
import socket from '@ohos.net.socket';let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();// 设置通信过程中使用参数
let options = {ALPNProtocols: ["spdy/1", "http/1.1"],// 连接到指定的IP地址和端口。address: {address: "192.168.xx.xxx",port: xxxx, // 端口family: 1,},// 设置用于通信过程中完成校验的参数。secureOptions: {key: "xxxx",                            // 密钥cert: "xxxx",                           // 数字证书ca: ["xxxx"],                           // CA证书passwd: "xxxx",                         // 生成密钥时的密码protocols: [socket.Protocol.TLSv12],    // 通信协议useRemoteCipherPrefer: true,            // 是否优先使用对端密码套件signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",    // 签名算法cipherSuite: "AES256-SHA256",           // 密码套件},
};// 绑定本地IP地址和端口。
tlsTwoWay.bind({ address: '192.168.xxx.xxx', port: xxxx, family: 1 }, err => {if (err) {console.log('bind fail');return;}console.log('bind success');// 订阅TLS Socket相关的订阅事件tlsTwoWay.on('message', value => {console.log("on message")let buffer = value.messagelet dataView = new DataView(buffer)let str = ""for (let i = 0; i < dataView.byteLength; ++i) {str += String.fromCharCode(dataView.getUint8(i))}console.log("on connect received:" + str)});tlsTwoWay.on('connect', () => {console.log("on connect")});tlsTwoWay.on('close', () => {console.log("on close")});// 建立连接tlsTwoWay.connect(options).then(() => {console.log('connect success');// 发送数据let sendBuf = 'client send to server...';tlsTwoWay.send(sendBuf).then(() => {console.log('client send ok');}).catch((err: Object) => {console.error('client send err: ' + JSON.stringify(err));})}).catch((err: Object) => {console.log('connect failed ' + JSON.stringify(err));});// 连接使用完毕后,主动关闭。取消相关事件的订阅。tlsTwoWay.close().then(() => {console.log('close success');}).catch((err: Object) => {console.log('close failed ' + JSON.stringify(err));});tlsTwoWay.off('message');tlsTwoWay.off('connect');tlsTwoWay.off('close');
});
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.

复制

本文参考引用HarmonyOS官方开发文档,基于API9。

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

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

相关文章

Linux文件IO(4):目录操作和文件属性获取

目录 1. 前言 2. 函数介绍 2.1 访问目录 – opendir 2.2 访问目录 – readdir 2.3 访问目录 – closedir 2.4 修改文件访问权限 – chmod/fchmod 2.5 获取文件属性 – stat/lstat/fstat 2.5.1 文件属性 – struct stat 2.6 文件类型 – st_mode 3. 代码练习 3.1 要求 3.2 代…

docker-compose安装adguard给局域网提供dns加速服务

启动配置 docker-compose.yaml配置文件 version: 3.3 services:adguard:image: adguard/adguardhome:latestcontainer_name: adguardrestart: unless-stoppedvolumes:- ./workdir:/opt/adguardhome/work- ./confdir:/opt/adguardhome/confports:- 53:53/tcp- 53:53/udp- 81:8…

练手题之四

公众号&#xff1a;编程驿站 第 1 题 【 问答题 】 • 走出迷宫 当你站在一个迷宫里的时候&#xff0c;往往会被错综复杂的道路弄得失去方向感&#xff0c;如果你能得到迷宫地图&#xff0c;事情就会变得非常简单。 假设你已经得到了一个n*m的迷宫的图纸&#xff0c;请你找出从…

js的check函数

在JavaScript中&#xff0c;并没有一个内置的名为check的函数。然而&#xff0c;你可以根据需求自定义一个check函数&#xff0c;用于执行各种验证和检查任务。这个check函数的具体作用完全取决于你如何定义和实现它。 以下是一个简单的示例&#xff0c;展示了如何定义一个che…

C++输出格式控制

setprecision(n)可控制输出流显示浮点数的数字个数。C默认的流输出数值有效位是6&#xff0c;所以不管数据是多少&#xff0c;都只输出六位。如果setprecision(n)与setiosflags(ios::fixed)或者setiosflags(ios_base::fixed)合用&#xff0c;可以控制小数点右边的数字个数。set…

面试题:MySQL 高可用

&#x1f496; 主从同步 原理 核心&#xff1a;二进制日志 binlog 是 MySQL 的日志&#xff0c;redolog 和 undolog 是 innodo 引擎的日志。 &#x1f496; 分库分表 分类 问题和技术 数据一致性问题 使用分布式事务管理组件&#xff0c;如ShardingSphere的分布式事务功能&…

Office办公软件之Excel的使用(一)

1、“开始”菜单中的部分属性 2、制作斜线表头 ctrl1,弹出设置单元格格式&#xff0c;选择“边框”&#xff0c;点击右下角有斜线的即可。 3、冻结窗口 一般冻结首列或首行&#xff0c;当我们翻页的时候&#xff0c;也能看到每一行的描述。 4、快捷键 1、 Ctrl1 设置单元格格…

阿基米德签证管理系统源码正式发布啦,基于thinkphp8.0+element-plus+uni-app

太棒了&#xff01;太棒了&#xff01;太棒了! 阿基米德签证系统的上线将为签证申请流程带来更高效和便利。 为什么选择阿基米德软件&#xff1f; 专注于行业垂直细分领域 / 专业级系统软件开发服务商 一、用户前端支持小程序、H5、PC和APP等主流流量端口 这样可以覆盖更广泛…

在 Deno Deploy 中使用更简单的新项目创建流程

Deno Deploy 是一个 JavaScript 无服务器应用程序的全球分布式平台&#xff0c;是在 Web 上部署和运行 JavaScript 和 TypeScript 的最简单、最快的方法之一。 Deno Deploy 的 JS/TS 和 WebAssembly 代码在地理位置靠近用户的托管服务器上运行&#xff0c;从而实现低延迟和更快…

python - lark实现四则运算语法解析

本文实现了对四则运算的语法解析规则。 EBNF 语法格式 calc_grammar """// 求和?start: sum| NAME "" sum -> assign_var // 赋值?sum: product| sum "" product -> add // 加法| sum "-" product -> sub /…

蓝桥备赛——前缀和

题干 我的 Code(50%样例) 对于上述题目的思路,我的想法是使用两个list存储对应的索引,一个存储头索引,一个存储结束索引。 然后使用全排列,计算所有列表元素之间的索引差,大于等于k的作为符合条件的,使用count计数器加一。 k=int(input()) s,c1,c2=map(str,input()…

图论模板详解

目录 Floyd算法 例题&#xff1a;蓝桥公园 Dijkstra算法 例题&#xff1a;蓝桥王国 SPFA算法 例题&#xff1a;随机数据下的最短路问题 总结 最小生成树MST Prim算法 Kruskal算法 例题&#xff1a;聪明的猴子 Floyd算法 最简单的最短路径算法&#xff0c;使用邻接…

Chapter 18 Current-Programmed Control 峰值电流模控制

Chapter 18 Current-Programmed Control 峰值电流模控制 对于PWM converter, 其输出电压由占空比d控制. 我们将直接控制占空比d称为电压模控制, 因为输出电压和占空比成正比.还有一种广泛应用的控制方法是控制开关管峰值电流的. 我们称为电流模控制. 这一章介绍峰值电流模控制…

BPMNJS 在原生HTML中的引入与使用

BPMNJS 在HTML中的引入与使用 在网上看到的大多是基于vue使用BPMN的示例或者教程&#xff0c;竟然没有在HTML使用的示例&#xff0c;有也是很简单的介绍核心库的引入和使用&#xff0c;并没有涉及到扩展库。于是简单看了下&#xff0c;真的是一波三折&#xff0c;坎坎坷坷。不…

【GPT-4 Turbo】、功能融合:OpenAI 首个开发者大会回顾

GPT-4 Turbo、功能融合&#xff1a;OpenAI 首个开发者大会回顾 就在昨天 2023 年 11 月 6 日&#xff0c;OpenAI 举行了首个开发者大会 DevDay&#xff0c;即使作为目前大语言模型行业的领军者&#xff0c;OpenAI 卷起来可一点都不比同行差。 OpenAI 在大会上不仅公布了新的 …

聊天应用与开发框架LobeChat

自从 OpenAI 宣布用户无需注册账号即可使用 ChatGPT 后&#xff0c;Github 上多了很多利用免登录 ChatGPT Web 提供的无限制免费 GPT-3.5-Turbo API 服务的应用&#xff0c;像 FreeGPT35、aurora 等等 之前有很多 AI 应用&#xff0c;因为没有 OpenAI Key而放弃&#xff0c;现…

python_3

文章目录 题目运行结果模式A模式B模式C模式D 题目 mode input("请选择模式:") n int(input("请输入数字:"))if mode "A" or mode "a":# 模式A n:输入的层数 i:当前的层数# 每行数字循环次数 ifor i in range(1, n 1):for j in r…

【Linux】Ubuntu 压缩与解压缩

首先在Windows下安装7Zip压缩软件&#xff0c;以便于可以生成 .tar 和 .bz2 的压缩格式的文件。例如新建一个test文件夹&#xff0c;操作后如下。 gzip 压缩工具&#xff1a;负责 .gz 格式的文件的压缩和解压缩&#xff0c;gzip --help 查看使用帮助&#xff1b; 压缩文件&…

FreeRTOS_day4:使用计数型信号量实现生产消费模型

1、 程序代码&#xff1a; myCountingSem01Handle osSemaphoreNew(2, 2, &myCountingSem01_attributes);void StartDefaultTask(void *argument) {/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */for(;;){osSemaphoreAcquire(myCountingSem01Handle,osWaitF…

Dockerd的使用

端口映射 存储卷 类似于mount&#xff0c;把真机的某个目录映射都容器里面 -v 选项可以有多个 利用存储卷修改配置文件 容器间网络模式 共享网络为 --networkcontainer&#xff1a;容器名 微服务架构 一种由容器为载体&#xff0c;使用多个小型服务组合来构建复杂的架构为…