当前位置: 首页 > 科技观察

【开发记录】Harmonyos开发板上使用Websocket(移植自librws库)

时间:2023-03-14 08:34:38 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zzlibrws:Tiny,跨平台websocket客户端C库相关代码可在下方下载,也可输入librws:将librws移植到鸿蒙Hi_3861开发板(gitee.com)查看技术有限,如有错误,还望指出。基础:完成官方快速入门教程。虽然websockets在双向web通信中除了使用ajax(单向轮询)外,一般都推荐websockets,但是websockets的实现代码网上很少,大多是js和java。C语言很少。因为课程项目开发需要用到websocket,所以在网上找了半天,终于找到了这个库。与其他库相比,该库对跨平台代码使用了一个适配层,没有使用libevent等其他库。用他的话说就是“Noadditionaldependencies”,所以移植起来很方便。.然后因为这个库使用了除windows平台以外的POSIX接口,而Hi_3861只有POSIX语句,但是没有实现(详见【开发记录】在Hi3861开发板上创建线程(三种方式)-鸿蒙HarmonyOS技术社区-官方战略合作伙伴-.COM解释)。所以适配相关功能,处理一些小细节。本文主要介绍如何使用,下一篇可能会介绍如何移植。有需要的可以先学习连志安老师-鸿蒙HarmonyOS技术社区-官方攻略伙伴-.COM文章如何在HarmonyOS移植Paho-MQTT实现MQTT协议,这篇文章有很大的参考价值。1.将这个库导入到工程中,下载下面的librws资源放到//third_party目录下,然后在//vendor/hisi/hi3861/hi3861/BUILD中的lite_component("sdk")-->deps下.gn文件中加入“//third_party/librws:librws_static”,以便下次编译时将相关代码编译成库放入工程中。2.编写应用代码,首先使用开发板连接wifi。具体操作请参考Hi3861WiFi操作、热点连接-鸿蒙HarmonyOS技术社区-官方战略合作伙伴-.COM。注意连接WiFi后需要休眠一段时间。下面的资源有相关代码。然后配置相关信息: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););注意配置信息一定要和真实信息对应,下面分享我的websocket服务端测试代码。然后配置回调函数://主动或错误断开连接的回调函数staticvoidon_socket_disconnected(rws_socketsocket){//processerrorrrws_errolerror=rws_socket_get_error(socket);if(error){printf("Socketdisconnectwithcode,error:%i,%s\n",rws_error_get_code(error),rws_error_get_description(error));}//忘记这个socketobject,duetonextdisconnectionsequencesocket=NULL;}//连接建立后的回调函数staticvoidon_socket_connected(rws_socketsocket){(void)soc??ket;printconnect("n");}//接收回调函数staticvoidon_socket_received_text(rws_socketsocket,constchar*text,constunsignedintlength){(void)soc??ket;char*buff[128]={0};memcpy_s(buff,128,text,length);printf("Sockettext:%s\n“,buff);}//rws_socket_set_socket_on_disconnected(_socket,&on_socket_disconnected);///////////////////requectrws_socket_socket_socket_socket_socket_socket_socket_socket_socket_socket_socket_socket(__socket)接收信息的功能,原仓库的测试代码是直接打印text,但是测试发现text变量除了接收到的信息外还会包含一些乱码,所以使用了memcpy_s函数复制有效信息并打印。在写accept回调函数的时候需要注意这个地方。下一步是连接、发送消息并关闭。printf("[RWS]readytoconnect\n");rws_boolres=rws_socket_connect(_socket);if(res==rws_false){printf("[RWS]errorconnect\n");exit(1);}sleep(2);constchar*e??xample_text="helloworld";printf([RWS]readytosendmsg\n");rws_socket_send_text(_socket,example_text);sleep(2);printf([RWS]readytodisconnect\n");rws_socket_disconnect_and_release(_socket);_socket=NULL;返回;3。测试代码服务器代码使用golang,详细代码在下方下载。在代码文件当前目录运行命令:gorunserver.go4,其他文章【开发实录】Hi3861开发板发送get请求【开发实录】Hi3861开发板创建线程(三种方式)查看更多,请访问:与华为官方共建的Harmonyos技术社区https://harmonyos.51cto.com/#zz