【开发实录】在鸿蒙开发板上使用websocket(移植自librws库)
librws: Tiny, cross platform websocket client C library
相关代码可在下面下载,也可进入librws: 将librws移植到鸿蒙Hi_3861开发板上 (gitee.com)查看
技术有限,如有错误还望不吝赐教。
基础:完成官方的快速入门教程
虽然在web双向通信中,除了使用ajax(单向轮询)外,一般都推荐websocket,但网上关于websocket的实现代码很少,而且大部分为js和java,很少有C语言。因为课程项目开发需要使用到websocket,就在网上寻找了挺久的,终于找到了这个库。相对于其他库来说,这个库需要跨平台的代码都用了一层适配层,而且没有用到其他例如libevent等其他库,用他的话说就是"No additional dependecies",所以移植挺方便的。然后因为这个库除了windows平台外,其他平台都是使用POSIX接口,而Hi_3861上只有POSIX的声明,但并没有实现(详细可看【开发实录】在Hi3861开发板上创建线程(三种方式)-鸿蒙HarmonyOS技术社区-官方战略合作伙伴-51CTO.COM里面有所说明)。所以适配相关的函数以及处理一些小细节。
这篇文章主要介绍如何使用,下一篇可能会介绍如何移植,大家有需求的话,可先学习连志安老师的如何在鸿蒙系统中移植 Paho-MQTT 实现MQTT协议-鸿蒙HarmonyOS技术社区-官方战略合作伙伴-51CTO.COM文章,这篇文章有挺大的参考价值的。
1、向项目中导入此库
下载下面的librws资源放至//third_party目录下,然后在//vendor/hisi/hi3861/hi3861/BUILD.gn文件中的lite_component(“sdk”)–>deps下添加 “//third_party/librws:librws_static” 这样就可以在下次编译时将相关代码编译成库放进项目内了。

2、编写应用代码
先使用板子连接上wifi,具体操作可查看Hi3861 WiFi操作,热点连接-鸿蒙HarmonyOS技术社区-官方战略合作伙伴-51CTO.COM,需要注意,连接WiFi后要sleep一段时间。下面资源有相关代码。
然后配置相关信息
rws_socket _socket = NULL;
_socket = rws_socket_create();
rws_socket_set_scheme(_socket, "ws");
rws_socket_set_host(_socket, "192.168.1.103");
rws_socket_set_port(_socket, 7777);
rws_socket_set_path(_socket, "/ws");
注意配置信息一定要对应真实信息,下面我会分享我的websocket服务端测试代码。
然后配置回调函数
// 因主动或者出现错误时,断开连接的回调函数
static void on_socket_disconnected(rws_socket socket) {
// process error
rws_error error = rws_socket_get_error(socket);
if (error) {
printf("Socket disconnect with code, error: %i, %s\n", rws_error_get_code(error), rws_error_get_description(error));
}
// forget about this socket object, due to next disconnection sequence
socket = NULL;
}
// 建立链接完成后的回调函数
static void on_socket_connected(rws_socket socket) {
(void) socket;
printf("Socket connected\n");
}
// 接受到信息的回调函数
static void on_socket_received_text(rws_socket socket, const char * text, const unsigned int length) {
(void) socket;
char *buff[128] = {0};
memcpy_s(buff, 128, text, length);
printf("Socket text: %s\n", buff);
}
// 设置回调函数
rws_socket_set_on_disconnected(_socket, &on_socket_disconnected); // required
rws_socket_set_on_connected(_socket, &on_socket_connected);
rws_socket_set_on_received_text(_socket, &on_socket_received_text);
需要注意一个地方,在接受信息回调函数中,原仓库的测试代码是直接打印text,但测试发现,text变量除了接受到的信息还会包括一部分乱码,所以使用了memcpy_s函数复制有效的信息在打印。大家编写接受回调函数时需要注意这个地方。
接下来就是连接,发送消息以及关闭了
printf("[RWS]ready to connect\n");
rws_bool res = rws_socket_connect(_socket);
if(res == rws_false) {
printf("[RWS]error connect\n");
exit(1);
}
sleep(2);
const char * example_text = "hello world";
printf("[RWS]ready to send msg\n");
rws_socket_send_text(_socket, example_text);
sleep(2);
printf("[RWS]ready to disconnect\n");
rws_socket_disconnect_and_release(_socket);
_socket = NULL;
return;
3、测试代码
服务器代码使用的是golang,详细代码在下方下载。在代码文件当前目录运行命令:
go run server.go
4、其他文章
作者:OSAaaa
想了解更多内容,请访问:
51CTO和华为官方战略合作共建的鸿蒙技术社区
https://harmonyos.51cto.com#bky
【开发实录】在鸿蒙开发板上使用websocket(移植自librws库)的更多相关文章
- 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南
昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...
- 鸿蒙开发板外设控制 之 实现按键“按下事件”和“释放事件”的通用框架(V0.0.1)
在帖子 <鸿蒙开发板外设控制>直播图文版(2020.10.28) 中我们提到过:"开发板上的按键也可以看作一种 GPIO 外设." 因此,要捕捉按键的状态(按下或释放) ...
- #2020征文-开发板# 用鸿蒙开发AI应用(一)硬件篇
目录: 前言 开发板简介 产品特色及功能 产品参数 各个主板功能简介 Hi3516DV300 芯片手册 前言鸿蒙2.0的系统刚开源出来,华为志在打造1+8+N万物互联的全场景智慧生活,不仅是国产操作系 ...
- DevEco Device Tool 2.1 Beta1在Hi3861开发板上可视化分析的体验
DevEco Device Tool迎来了2.1 Beta1,新版本有很多亮点.在上次"DevEco Device Tool 2.1 Beta1 的Hi3861在Windows平台的编译体验 ...
- easycwmp在开发板上的配置
原创作品,转载请注明出处 copyright:weishusheng 2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...
- FS210开发板上Qt4.7.0移植过程
作者:冯老师,华清远见嵌入式学院讲师. 1. 搭建Qt开发环境平台 1.开发环境:ubuntu 12.04 2.交叉编译链:arm-cortex_a8-linux-gnueabi 3.开发板:FS21 ...
- 开发板上使用core文件调试
转载:http://www.nginx.cn/1521.html 如果开发板的操作系统也是linux,core调试方法依然适用.如果开发板上不支持gdb,可将开发板的环境(依赖库).可执行文件和cor ...
- [转载]在iTOP-4412开发板上调试helloworld应用
本文转自迅为论坛:http://www.topeetboard.com 1.安装ADB驱动 在开发板上调试 Android 应用,首先要安装 ADB 驱动. 通过“SDK Manager.exe”来安 ...
- DE1-SOC开发板上搭建NIOS II处理器运行UCOS II
DE1-SOC开发板上搭建NIOS II处理器运行UCOS II 今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...
随机推荐
- go mod 使用bee工具
https://github.com/beego/bee/releases bee windows https://github.com/beego/bee/releases/download/v1 ...
- STM32时钟和定时器
时钟源 STM32包含了5个时钟源,分别为HSI.HSE.LSI.LSE.PLL. HSI是高速内部时钟.RC振荡器,频率为8MHz: HSE是高速外部时钟,即晶振,可接石英/陶瓷谐振器或接外部时钟源 ...
- 【应用服务 App Service】如何移除App Service Response Header中包含的服务器敏感信息
问题描述 有些情况下,当应用部署到App Service上后,在有些Response Header中,可以看见关于服务器的一些信息,这样会导致隐藏的安全问题,所以可以在web.config中移除某些关 ...
- matlab cvx工具箱解决线性优化问题
题目来源:数学建模算法与应用第二版(司守奎)第一章习题1.4 题目说明 作者在答案中已经说明,求解上述线性规划模型时,尽量用Lingo软件,如果使用Matlab软件求解,需要做变量替换,把二维决策变量 ...
- 一个例子"入坑"布谷鸟算法(附完整py代码)
布谷鸟是比较新的启发式最优化算法,但其与传统的遗传算法,退火算法等相比,被证明收敛速度更快,计算效率更高! 文章目录 本文诞生的缘由 布谷鸟算法思想简介 更新位置的方式 莱维飞行 局部随机行走 抛出个 ...
- 经典剪枝算法的例题——Sticks详细注释版
这题听说是道十分经典的剪枝算的题目,不要问我剪枝是什么,我也不知道,反正我只知道用到了深度搜索 我参考了好多资料才悟懂,然后我发现网上的那些大神原理讲的很明白,但代码没多少注释,看的很懵X,于是我抄起 ...
- 关于天线长度及LC值的计算
一.天线长度与波长 1.天线最佳长度计算 理论和实践证明,当天线的长度为无线电信号波长的1/4时,天线的发射和接收转换效率最高.因此,天线的长度将根据所发射和接收信号的频率即波长来决定.只要知道对应发 ...
- 样式操作-核心DOM
1.核心DOM 只能操作行内(内嵌)样式-->style里面的所有内容(核心DOM) //麻烦获取 console.log(div.getAttribute("style") ...
- 4G DTU模块的功能和作用是什么
4G DTU模块我们可以简单将它理解为使用4G无线通信网络来进行远距离无线传送的终端设备.4G DTU模块基于4G方式进行远距离的数据传输,是专门用于将串口数据转换为IP数据或将IP数据转换为串口数据 ...
- Java学习的第七天
1.今天学了数组 数组名称.length是数组的长度. 数组打印 二维数组: 多维数组同二维数组类似. 最大值最小值算法. 2.在输入过程中的 定义 int 名=con.nextInt();当时不懂. ...