成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在鴻蒙系統上使用MQTT編程

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

[[353642]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

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

我們使用的是paho mqtt軟件包,這里介紹一下怎么使用mqtt協議編程。關于鴻蒙系統的mqtt移植好的軟件包,相關github鏈接如下:

https://gitee.com/qidiyun/harmony_mqtt

這里提供一個簡單的編程示例:

這里我們使用MQTTClient編程模型,他支持多任務多線程,非常適合用在鴻蒙系統上。

1. 網絡初始化

這里定義一個 Network 結構體,然后指定我們的MQTT服務器的IP和端口號。

  1. Network n; 
  2.    //初始化結構體 
  3.  NetworkInit(&n); 
  4.  //連接到指定的MQTT服務器IP、端口號 
  5.  NetworkConnect(&n, “XXX.XXX.XXX.XXX”, XXXX); 

 2. 設置MQTT緩存和啟動MQTT線程

我們這里使用的是MQTT線程功能。

  1. MQTTClientInit(&c, &n, 1000, buf, 100, readbuf, 100); 
  2.  MQTTStartTask(&c); 

 3. 設置MQTT相關參數

接下來我們設置MQTT的相關參數,包括版本號、客戶端ID、賬戶密碼等

  1. MQTTPacket_connectData data = MQTTPacket_connectData_initializer;  
  2.  data.willFlag = 0; 
  3.  //MQTT版本為 v3 
  4.  data.MQTTVersion = 3; 
  5.  //設置客戶端ID 
  6.  data.clientID.cstring = opts.clientid; 
  7.  //設置客戶端賬戶 
  8.  data.username.cstring = opts.username; 
  9.  //設置客戶端密碼 
  10.  data.password.cstring = opts.password
  11.  data.keepAliveInterval = 10; 
  12.  data.cleansession = 1; 
  13.  
  14.  //連接到MQTT服務器 
  15.  rc = MQTTConnect(&c, &data); 

 4. 訂閱主題和接收消息

訂閱主題可以使用如下函數

  1. MQTTSubscribe(&c, topic, opts.qos, messageArrived); 

它的函數原型如下:

  1. DLLExport int MQTTSubscribe(MQTTClient* client, const char* topicFilter, enum QoS, messageHandler); 

其中:

  1. void messageArrived(MessageData* md) 
  2.  MQTTMessage* message = md->message; 
  3.  //打印接收到的消息的長度、和消息內容 
  4.  printf("%.*s", (int)message->payloadlen, (char*)message->payload); 

 5. 發送消息

發送消息也比較簡單,我們只需要設置好我們的主題和消息內容即可

  1. memset(&pubmsg, '\0', sizeof(pubmsg)); 
  2.  //消息內容為 hello harmonyOS ! 
  3.    pubmsg.payload = (void*)"hello harmonyOS !"
  4.  //消息長度 
  5.    pubmsg.payloadlen = strlen((char*)pubmsg.payload); 
  6.    pubmsg.qos = QOS0; 
  7.    pubmsg.retained = 0; 
  8.    pubmsg.dup = 0; 
  9.  
  10.  //推送消息,主題為 pubtest 
  11.  MQTTPublish(&c, "pubtest", &pubmsg); 

 完整源碼如下: 

  1. #include <stdio.h> 
  2.  
  3. #include <unistd.h> 
  4.  
  5. #include "ohos_init.h" 
  6. #include "cmsis_os2.h" 
  7.  
  8. #include <unistd.h> 
  9. #include "hi_wifi_api.h" 
  10. //#include "wifi_sta.h" 
  11. #include "lwip/ip_addr.h" 
  12. #include "lwip/netifapi.h" 
  13.  
  14. #include "lwip/sockets.h" 
  15.  
  16. #include "MQTTClient.h" 
  17.  
  18. /** 
  19.  * MQTT URI farmat: 
  20.  * domain mode 
  21.  * tcp://iot.eclipse.org:1883 
  22.  * 
  23.  * ipv4 mode 
  24.  * tcp://192.168.10.1:1883 
  25.  * ssl://192.168.10.1:1884 
  26.  * 
  27.  * ipv6 mode 
  28.  * tcp://[fe80::20c:29ff:fe9a:a07e]:1883 
  29.  * ssl://[fe80::20c:29ff:fe9a:a07e]:1884 
  30.  */ 
  31. #define MQTT_URI                "tcp://106.13.62.194:1883" 
  32.  
  33. struct opts_struct 
  34.     char* clientid; 
  35.     int nodelimiter; 
  36.     char* delimiter; 
  37.     enum QoS qos; 
  38.     char* username; 
  39.     charpassword
  40.     char* host; 
  41.     int port; 
  42.     int showtopics; 
  43. } opts = 
  44.     (char*)"stdout-subscriber", 0, (char*)"\n", QOS2, NULLNULL, (char*)"106.13.62.194", 1883, 1 
  45. }; 
  46.  
  47.  
  48. void messageArrived(MessageData* md) 
  49.     MQTTMessage* message = md->message; 
  50.  
  51.     if (opts.showtopics) 
  52.         printf("%.*s\t", md->topicName->lenstring.len, md->topicName->lenstring.data); 
  53.     if (opts.nodelimiter) 
  54.         printf("%.*s", (int)message->payloadlen, (char*)message->payload); 
  55.     else 
  56.         printf("%.*s%s", (int)message->payloadlen, (char*)message->payload, opts.delimiter); 
  57.     //fflush(stdout); 
  58.  
  59.  
  60. unsigned char buf[100]; 
  61. unsigned char readbuf[100]; 
  62.  
  63. int mqtt_test(void) 
  64.     int rc = 0; 
  65.      
  66.     MQTTMessage pubmsg; 
  67.  
  68.      
  69.     char* topic = "test"
  70.  
  71.     if (strchr(topic, '#') || strchr(topic, '+')) 
  72.         opts.showtopics = 1; 
  73.     if (opts.showtopics) 
  74.         printf("topic is %s\n", topic); 
  75.  
  76.     Network n; 
  77.     MQTTClient c; 
  78.  
  79.     NetworkInit(&n); 
  80.     NetworkConnect(&n, opts.host, opts.port); 
  81.      
  82.     MQTTClientInit(&c, &n, 1000, buf, 100, readbuf, 100); 
  83.     MQTTStartTask(&c); 
  84.  
  85.     MQTTPacket_connectData data = MQTTPacket_connectData_initializer;        
  86.     data.willFlag = 0; 
  87.     data.MQTTVersion = 3; 
  88.     data.clientID.cstring = opts.clientid; 
  89.     data.username.cstring = opts.username; 
  90.     data.password.cstring = opts.password
  91.  
  92.     data.keepAliveInterval = 10; 
  93.     data.cleansession = 1; 
  94.     printf("Connecting to %s %d\n", opts.host, opts.port); 
  95.      
  96.     rc = MQTTConnect(&c, &data); 
  97.     printf("Connected %d\n", rc); 
  98.      
  99.      
  100.  
  101.     printf("Subscribing to %s\n", topic); 
  102.     rc = MQTTSubscribe(&c, topic, opts.qos, messageArrived); 
  103.     printf("Subscribed %d\n", rc); 
  104.  
  105.     memset(&pubmsg, '\0', sizeof(pubmsg)); 
  106.     pubmsg.payload = (void*)"hello harmonyOS !"
  107.     pubmsg.payloadlen = strlen((char*)pubmsg.payload); 
  108.     pubmsg.qos = QOS0; 
  109.     pubmsg.retained = 0; 
  110.     pubmsg.dup = 0; 
  111.  
  112.      
  113.  
  114.     while (1) 
  115.     { 
  116.         MQTTPublish(&c, "pubtest", &pubmsg); 
  117.         sleep(1);    
  118.     } 
  119.      
  120.     printf("Stopping\n"); 
  121.  
  122.     MQTTDisconnect(&c); 
  123.     NetworkDisconnect(&n); 
  124.  
  125.     return 0; 

 想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

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

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2023-04-20 17:26:40

FreeDOSC 語言

2020-11-19 10:25:24

MQTT

2020-10-27 10:00:26

鴻蒙開發板物聯網

2019-12-05 10:30:17

LinuxMultitail

2011-07-07 16:00:15

iPhone OpenCV

2011-03-22 10:06:27

LinuxZFS

2020-08-25 19:56:43

MinGWWindowsGNU

2021-01-22 14:03:34

Flutter系統鴻蒙

2020-11-18 11:36:35

鴻蒙系統

2020-12-07 12:47:22

MQTT鴻蒙hi3861

2011-03-25 11:21:36

NagiosLinux

2021-03-22 08:45:30

異步編程Java

2011-03-01 11:23:37

Chrome ActiveX

2023-08-25 09:17:38

2022-09-14 09:18:52

SubversionLinux系統

2011-05-05 14:24:02

Android NDKAndroid NDKNDK

2024-01-09 09:27:57

Rust編程泛型

2024-01-07 17:29:10

編程語言線程Rust

2019-12-20 08:50:21

LinuxKsnip截圖

2012-04-11 13:42:53

ibmdw
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品一区二区三区中文字幕 | 日本三级电影在线看 | 国产成人小视频 | 国产在线精品一区二区三区 | 成人精品一区二区三区 | 亚洲精品在线国产 | 国产成人99久久亚洲综合精品 | 乱码av午夜噜噜噜噜动漫 | 精品九九 | 91pron在线| 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品久久久久无码av | 日本精品在线观看 | 国产欧美日韩精品在线观看 | 亚洲社区在线 | 91精品国产乱码久久久久久久 | 精品一区二区三区四区在线 | 亚洲a在线观看 | 一区二视频 | 欧美日韩中文在线 | 国产日韩欧美一区二区 | 国产成人精品一区二区三区视频 | 这里只有精品99re | 国产不卡视频 | 国产精品久久久久久久7电影 | 青青操91 | 在线视频国产一区 | 久久久久国产精品 | 日日操网站 | 久久中文字幕一区 | 久久综合亚洲 | 91精品久久久久久久久久小网站 | 暖暖成人免费视频 | 欧美在线观看一区 | 国产午夜精品一区二区三区嫩草 | 国产一区二区精品在线观看 | 91在线视频精品 | 黄色三级免费 | 日日夜夜精品视频 | 国产91视频免费 |