鸿蒙系统是单任务还是多任务,在鸿蒙系统上使用MQTT编程
我们使用的是paho mqtt软件包,这里介绍一下怎么使用mqtt协议编程。关于鸿蒙系统的mqtt移植好的软件包,相关github链接如下:
https://gitee.com/qidiyun/harmony_mqtt
这里提供一个简单的编程示例:
这里我们使用MQTTClient编程模型,他支持多任务多线程,非常适合用在鸿蒙系统上。
1. 网络初始化
这里定义一个 Network 结构体,然后指定我们的MQTT服务器的IP和端口号。
Network n;
//初始化结构体
NetworkInit(&n);
//连接到指定的MQTT服务器IP、端口号
NetworkConnect(&n, “XXX.XXX.XXX.XXX”, XXXX);
2. 设置MQTT缓存和启动MQTT线程
我们这里使用的是MQTT线程功能。
MQTTClientInit(&c, &n, 1000, buf, 100, readbuf, 100);
MQTTStartTask(&c);
3. 设置MQTT相关参数
接下来我们设置MQTT的相关参数,包括版本号、客户端ID、账户密码等
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.willFlag = 0;
//MQTT版本为 v3
data.MQTTVersion = 3;
//设置客户端ID
data.clientID.cstring = opts.clientid;
//设置客户端账户
data.username.cstring = opts.username;
//设置客户端密码
data.password.cstring = opts.password;
data.keepAliveInterval = 10;
data.cleansession = 1;
//连接到MQTT服务器
rc = MQTTConnect(&c, &data);
4. 订阅主题和接收消息
订阅主题可以使用如下函数
MQTTSubscribe(&c, topic, opts.qos, messageArrived);
它的函数原型如下:
DLLExportintMQTTSubscribe(MQTTClient* client, constchar* topicFilter, enum QoS, messageHandler);
其中:
void messageArrived(MessageData* md)
{
MQTTMessage* message = md->message;
//打印接收到的消息的长度、和消息内容
printf("%.*s", (int)message->payloadlen, (char*)message->payload);
}
5. 发送消息
发送消息也比较简单,我们只需要设置好我们的主题和消息内容即可
memset(&pubmsg,'\0', sizeof(pubmsg));
//消息内容为 hello harmonyOS !
pubmsg.payload = (void*)"hello harmonyOS !";
//消息长度
pubmsg.payloadlen = strlen((char*)pubmsg.payload);
pubmsg.qos = QOS0;
pubmsg.retained = 0;
pubmsg.dup = 0;
//推送消息,主题为 pubtest
MQTTPublish(&c, "pubtest", &pubmsg);
完整源码如下:
#include
#include
#include "ohos_init.h"
#include "cmsis_os2.h"
#include
#include "hi_wifi_api.h"
//#include "wifi_sta.h"
#include "lwip/ip_addr.h"
#include "lwip/netifapi.h"
#include "lwip/sockets.h"
#include "MQTTClient.h"
/**
* MQTT URI farmat:
* domain mode
* tcp://iot.eclipse.org:1883
*
* ipv4 mode
* tcp://192.168.10.1:1883
* ssl://192.168.10.1:1884
*
* ipv6 mode
* tcp://[fe80::20c:29ff:fe9a:a07e]:1883
* ssl://[fe80::20c:29ff:fe9a:a07e]:1884
*/
#define MQTT_URI "tcp://106.13.62.194:1883"
struct opts_struct
{
char* clientid;
intnodelimiter;
char* delimiter;
enum QoS qos;
char* username;
char*password;
char* host;
intport;
intshowtopics;
} opts =
{
(char*)"stdout-subscriber", 0, (char*)"\n", QOS2,NULL,NULL, (char*)"106.13.62.194", 1883, 1
};
void messageArrived(MessageData* md)
{
MQTTMessage* message = md->message;
if (opts.showtopics)
printf("%.*s\t", md->topicName->lenstring.len, md->topicName->lenstring.data);
if (opts.nodelimiter)
printf("%.*s", (int)message->payloadlen, (char*)message->payload);
else
printf("%.*s%s", (int)message->payloadlen, (char*)message->payload, opts.delimiter);
//fflush(stdout);
}
unsigned charbuf[100];
unsigned charreadbuf[100];
intmqtt_test(void)
{
intrc = 0;
MQTTMessage pubmsg;
char* topic ="test";
if (strchr(topic, '#') || strchr(topic,'+'))
opts.showtopics = 1;
if (opts.showtopics)
printf("topic is %s\n", topic);
Network n;
MQTTClient c;
NetworkInit(&n);
NetworkConnect(&n, opts.host, opts.port);
MQTTClientInit(&c, &n, 1000, buf, 100, readbuf, 100);
MQTTStartTask(&c);
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.willFlag = 0;
data.MQTTVersion = 3;
data.clientID.cstring = opts.clientid;
data.username.cstring = opts.username;
data.password.cstring = opts.password;
data.keepAliveInterval = 10;
data.cleansession = 1;
printf("Connecting to %s %d\n", opts.host, opts.port);
rc = MQTTConnect(&c, &data);
printf("Connected %d\n", rc);
printf("Subscribing to %s\n", topic);
rc = MQTTSubscribe(&c, topic, opts.qos, messageArrived);
printf("Subscribed %d\n", rc);
memset(&pubmsg, '\0', sizeof(pubmsg));
pubmsg.payload = (void*)"hello harmonyOS !";
pubmsg.payloadlen = strlen((char*)pubmsg.payload);
pubmsg.qos = QOS0;
pubmsg.retained = 0;
pubmsg.dup = 0;
while (1)
{
MQTTPublish(&c, "pubtest", &pubmsg);
sleep(1);
}
printf("Stopping\n");
MQTTDisconnect(&c);
NetworkDisconnect(&n);
return0;
}
【编辑推荐】
【责任编辑:jianghua TEL:(010)68476606】
点赞 0
鸿蒙系统是单任务还是多任务,在鸿蒙系统上使用MQTT编程相关推荐
- 用huggingface.transformers在文本分类任务(单任务和多任务场景下)上微调预训练模型
诸神缄默不语-个人CSDN博文目录 transformers官方文档:https://huggingface.co/docs/transformers/index AutoModel文档:https: ...
- 华为鸿蒙系统正式登场,华为自研鸿蒙系统将于8月9日正式登场,还有全新的鸿鹄芯片...
最近华为发布了很多手机:荣耀20系列手机.荣耀9X系列.华为Nova 5系列,以及7月26日发布的华为Nova5i Pro和华为首部5G手机Mate20 X 5G版,这些手机将成为华为下半年的出货主力 ...
- 鸿蒙系统为万物互联而生,鸿蒙系统发布:万物互联 EMUI10同台上场
华为消费者业务CEO余承东首先登场.他介绍说:"作为华为旗下面向年轻人的科技潮牌,荣耀承载着华为技术的前瞻性应用和探索,荣耀智慧屏是华为智慧屏战略和华为鸿蒙操作系统的首款落地产品,意义重大& ...
- 支持鸿蒙的手机型号多少钱,华为鸿蒙系统支持手机型号一览
随着华为鸿蒙系统即将推出,大家也愈发的关注.据悉华为鸿蒙系统是支持第三方手机厂商使用的,因此不少用户也考虑届时尝试用看看.那么,鸿蒙系统支持哪些手机呢?像国产手机小米.OPPO等能不能使用?下面一起来 ...
- 鸿蒙系统的升级名单,首批升级鸿蒙系统的名单确认,华为安卓系统将成为过去式!...
现在很多关注国内科技的人都知道,华为目前遭受了米国持续性的打压,米国的禁令也让华为处于芯片短缺的危机之中,华为如今的遭遇让我们知道了自主掌握核心技术的重要性.以前国内企业为了降低成本,引入了西方的技术 ...
- 鸿蒙系统第五批公测,鸿蒙系统即将迎来二轮公测,nova机型增添其中
作为国内通讯手机行业的巨头,由于美国极具针对性的制裁手段,这两年华为处境一直都十分艰难,芯片问题已经是燃眉之急,现在华为的手机产业也随之摇摇欲坠,但是对于国内广大花粉而言,仍然坚信着华为肯定能够扛过这 ...
- 华为鸿蒙系统英语报纸_华为操作系统“鸿蒙”的英文是什么?
2019年8月9日下午,华为在2019年开发者大会上正式发布全新分布式操作系统:鸿蒙!顿时成了轰动全球的特大新闻.据称如果未来安卓系统无法正常使用,华为会用鸿蒙系统替代.然而,鸿蒙系统的英文名称却并未 ...
- 华为鸿蒙系统发布完整视频,华为发布鸿蒙系统 华为鸿蒙系统发布会完整视频 华为鸿蒙系统发布会回放...
您可能感兴趣的话题: 华为发布鸿蒙系统 核心提示:华为发布鸿蒙系统 华为鸿蒙系统发布会完整视频 华为鸿蒙系统发布会回放.华为鸿蒙手机操作系统的正式发布无疑是近期数码圈中的大事件.下面就让小编带大家看看 ...
- 鸿蒙系统会支持youtube吗,华为鸿蒙系统,会受到人们的欢迎吗?
原标题:华为鸿蒙系统,会受到人们的欢迎吗? 华为手机是国内最好的安卓手机品牌,在销量上也是仅次于三星,甚至于超过了苹果的IPhone手机,那么,华为手机能否超越三星,成为全球第一的智能手机品牌呢? 打 ...
最新文章
- Spring MVC常用注解说明
- 安装fiddler做代理,本地开发手机端看效果
- list of Java class file format major version numbers?
- 心路历程:「双非」研究生数据分析春招
- javascript Window 对象模型
- simplexml和xpath
- [MySQL] MySQL x64 下载地址
- app个人健康管理系统开源_开源会促进心理健康吗?
- 正则表达式re中的group和groups
- 20.8 cace判断
- 如何在 Kubernetes 集群中集成 Kata
- 利用卷积神经网络(CNN)构造社区问答系统
- 图形的逻辑思维题分类以及思路
- 解惑篇|Docker和 K8s 到底啥关系?想学K8s,必须得先学 Docker 吗?
- C# Socket网络编程精华篇 (转)
- 数据结构(c语言版) 计算机科学丛书,数据结构与算法分析--C语言描述(原书第2版)(计算机科学丛书)...
- 我的世界java版1.7.10咋刷物品,我的世界1.7.10刷物品mod
- 计算机组成与系统结构指导,计算机组成与系统结构实验指导书
- Android7.0 8.0进程保活与拉活的实现方式
- python魔术方法是什么_Python常用魔术方法
热门文章
- java怎么访问视图_springmvc-直接访问视图文件
- ds证据理论python实现_你好,Julia!再见,Python!
- linux 命令行 java_在Linux上讲Java命令行的作为服务运行
- 你还在为文件读写而烦恼?Python已经轻松帮你解决了(建议收藏)
- Django框架(23.Django中的模板的标签、变量、过滤器和注释)
- boost::type_erasure::add_assignable相关的测试程序
- boost::test::basic_cstring相关的测试程序
- boost::spirit模块使用 phoenix 进行实际表达式评估的语法和语义操作的测试程序
- boost::outcome模块comparison相关的测试程序
- boost::math::quadrature::gauss_kronrod用法的测试程序