【开发实录】在鸿蒙开发板上使用Websocket(移植自librws库)

系统
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz

[[353869]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

 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一段时间。下面资源有相关代码。

然后配置相关信息:

  1. rws_socket _socket = NULL
  2.    _socket = rws_socket_create(); 
  3.     
  4.    rws_socket_set_scheme(_socket, "ws"); 
  5.    rws_socket_set_host(_socket, "192.168.1.103"); 
  6.    rws_socket_set_port(_socket, 7777); 
  7.    rws_socket_set_path(_socket, "/ws"); 

 注意配置信息一定要对应真实信息,下面我会分享我的websocket服务端测试代码。

然后配置回调函数:

  1. // 因主动或者出现错误时,断开连接的回调函数 
  2. static void on_socket_disconnected(rws_socket socket) { 
  3.     // process error 
  4.     rws_error error = rws_socket_get_error(socket); 
  5.     if (error) {  
  6.         printf("Socket disconnect with code, error: %i, %s\n", rws_error_get_code(error), rws_error_get_description(error));  
  7.     } 
  8.     // forget about this socket object, due to next disconnection sequence 
  9.     socket = NULL
  10.  
  11. // 建立链接完成后的回调函数 
  12. static void on_socket_connected(rws_socket socket) { 
  13.     (void) socket; 
  14.     printf("Socket connected\n"); 
  15.  
  16. // 接受到信息的回调函数 
  17. static void on_socket_received_text(rws_socket socket, const char * text, const unsigned int length) { 
  18.     (void) socket; 
  19.     char *buff[128] = {0}; 
  20.     memcpy_s(buff, 128, text, length); 
  21.     printf("Socket text: %s\n", buff); 

  1. // 设置回调函数 
  2.    rws_socket_set_on_disconnected(_socket, &on_socket_disconnected); // required 
  3.    rws_socket_set_on_connected(_socket, &on_socket_connected); 
  4.    rws_socket_set_on_received_text(_socket, &on_socket_received_text); 

 需要注意一个地方,在接受信息回调函数中,原仓库的测试代码是直接打印text,但测试发现,text变量除了接受到的信息还会包括一部分乱码,所以使用了memcpy_s函数复制有效的信息在打印。大家编写接受回调函数时需要注意这个地方。

接下来就是连接,发送消息以及关闭了。

  1. printf("[RWS]ready to connect\n"); 
  2.  rws_bool res = rws_socket_connect(_socket); 
  3.  if(res == rws_false) { 
  4.      printf("[RWS]error connect\n"); 
  5.      exit(1); 
  6.  } 
  7.  sleep(2); 
  8.  const char * example_text = "hello world"
  9.  printf("[RWS]ready to send msg\n"); 
  10.  rws_socket_send_text(_socket, example_text); 
  11.  sleep(2); 
  12.  printf("[RWS]ready to disconnect\n"); 
  13.  rws_socket_disconnect_and_release(_socket); 
  14.  _socket = NULL
  15.  return

 3、测试代码

服务器代码使用的是golang,详细代码在下方下载。在代码文件当前目录运行命令:

  1. go run server.go 

4、其他文章

【开发实录】在Hi3861开发板上发送一个get请求

【开发实录】在Hi3861开发板上创建线程(三种方式)

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2020-10-30 17:12:05

Hi3861

2020-10-30 09:48:03

Hi3861开发板get请求

2022-01-07 21:11:27

鸿蒙HarmonyOS应用

2020-12-07 12:34:33

开发板鸿蒙hello world

2020-12-29 09:59:01

鸿蒙HarmonyOS智能家居

2020-12-16 10:05:48

鸿蒙开发板Onenet平台

2020-11-17 12:15:36

MQTT开发

2022-06-06 10:44:10

C++语言鸿蒙

2020-11-19 10:25:24

MQTT

2020-11-18 11:56:06

鸿蒙Hi3861

2020-10-27 10:00:26

鸿蒙开发板物联网

2021-12-30 16:12:07

鸿蒙HarmonyOS应用

2020-12-08 12:36:41

Hi3861 ADC驱动开发

2021-12-16 15:14:54

鸿蒙HarmonyOS应用

2020-11-06 10:15:16

HiBurn

2011-06-15 14:19:11

QT 移植

2020-10-14 09:37:03

HiBurn鸿蒙.bin文件

2020-11-25 11:55:47

FlappyBird

2020-10-30 17:42:36

鸿蒙 OS Hi386

2017-09-17 12:21:52

移植Linux系统sqlite3
点赞
收藏

51CTO技术栈公众号