自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在鴻蒙系統(tǒng)上使用MQTT編程

系統(tǒng)
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com/#zz

[[353642]]

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

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

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

https://gitee.com/qidiyun/harmony_mqtt

這里提供一個(gè)簡單的編程示例:

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

1. 網(wǎng)絡(luò)初始化

這里定義一個(gè) Network 結(jié)構(gòu)體,然后指定我們的MQTT服務(wù)器的IP和端口號。

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

 2. 設(shè)置MQTT緩存和啟動(dòng)MQTT線程

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

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

 3. 設(shè)置MQTT相關(guān)參數(shù)

接下來我們設(shè)置MQTT的相關(guān)參數(shù),包括版本號、客戶端ID、賬戶密碼等

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

 4. 訂閱主題和接收消息

訂閱主題可以使用如下函數(shù)

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

它的函數(shù)原型如下:

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

其中:

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

 5. 發(fā)送消息

發(fā)送消息也比較簡單,我們只需要設(shè)置好我們的主題和消息內(nèi)容即可

  1. memset(&pubmsg, '\0', sizeof(pubmsg)); 
  2.  //消息內(nèi)容為 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; 

 想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

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

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2023-04-20 17:26:40

FreeDOSC 語言

2020-10-27 10:00:26

鴻蒙開發(fā)板物聯(lián)網(wǎng)

2020-11-19 10:25:24

MQTT

2019-12-05 10:30:17

LinuxMultitail

2011-07-07 16:00:15

iPhone OpenCV

2011-03-22 10:06:27

LinuxZFS

2021-01-22 14:03:34

Flutter系統(tǒng)鴻蒙

2020-11-18 11:36:35

鴻蒙系統(tǒng)

2020-12-07 12:47:22

MQTT鴻蒙hi3861

2020-08-25 19:56:43

MinGWWindowsGNU

2011-03-01 11:23:37

Chrome ActiveX

2021-03-22 08:45:30

異步編程Java

2023-08-25 09:17:38

2011-03-25 11:21:36

NagiosLinux

2011-05-05 14:24:02

Android NDKAndroid NDKNDK

2022-09-14 09:18:52

SubversionLinux系統(tǒng)

2020-10-26 12:30:23

LinuxyumZFS

2021-08-19 18:28:22

FedoraLinuxOpenCV

2019-10-29 16:30:10

FedoraSSH端口Linux

2020-04-10 09:56:12

at命令Linux安排任務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號