linux下使用C语言实现MQTT通信(三丶总结经验)
在做MQTT时遇到了很多困难,从无到有,也收获了许多,下面就来总结一下我做本项目的心得;
一丶学会了使用yEd Graph Editor软件作图,(虽然做的很丑!),以前在写程序的时候就是闷头写,根本不画流程图,出现了bug解决不了又不知道从哪里改起,所以现在学会了画流程图写代码变得轻松了,该软件的下载地址:https://www.yworks.com/products/yed
二丶学习了许多关于MQTT的函数,下面就来介绍一下这些函数:
1丶MQTTClient_message:客户端的信息函数。
typedef struct
{char struct_id[4];//结构体的识别序列,为MQTMint struct_version;//结构体的版本,为0int payloadlen;//MQTT消息负载的长度void* payload;//指向消息负载的指针int qos;//服务质量int retained;//保留标志int dup;dup//标志指示这个消息是否是重复的。 只有在收到QoS1消息时才有意义。 如果为true,则客户端应用程序应采取适当的措施来处理重复的消息。int msgid;//消息标识符通常保留供MQTT客户端和服务器内部使用。
} MQTTClient_message;
2丶MQTTClient_create:创建MQTT客户端函数
DLLExport int MQTTClient_create( MQTTClient * handle,//指向MQTT客户端句柄的指针。句柄被成功从函数中返回的客户端引用所填充const char * serverURI,//以空结尾的字符串,其指定客户端将连接到的服务器。const char * clientId,//客户端标识符(clientId)是一个以空结尾的 UTF-8 编码字符串,客户端连接到服务器时将它传递过去。int persistence_type,//客户端所使用的持久类型。void * persistence_context// 如果应用程序使用的是MQTTCLIENT_PERSISTENCE_NONE持久化,该参数不使用,而且值应该设置为NULL。对于MQTTCLIENT_PERSISTENCE_DEFAULT持久化,应该设置持久化目录的位置(如果设置为NULL,则使用工作目录作为持久化目录)。使用MQTTCLIENT_PERSISTENCE_USER持久化,则将此参数指向有效的MQTTClient_persistence结构。)
3丶MQTTClient_setCallbacks:该函数为特定的客户端创建回调函数
DLLExport int MQTTClient_setCallbacks ( MQTTClient handle,//指向MQTT客户端句柄的指针。句柄被成功从函数中返回的客户端引用所填充void * context,//指向任何应用程序特定上下文的指针。 上下文指针被传递给每个回调函数,以提供对回调中的上下文信息的访问。MQTTClient_connectionLost * cl,//指向MQTTClient_connectionLost()回调函数的指针。 如果您的应用程序不处理断开连接,您可以将其设置为NULL。MQTTClient_messageArrived * ma,//指向MQTTClient_messageArrived()回调函数的指针。 当您调用MQTTClient_setCallbacks()时,必须指定此回调函数。MQTTClient_deliveryComplete * dc //指向MQTTClient_deliveryComplete()回调函数的指针。 如果您的应用程序同步发布,或者您不想检查是否成功发送,则可以将其设置为NULL。)
4丶MQTTClient_connect:将先前创建的客户端连接到MQTT服务器。
DLLExport int MQTTClient_connect ( MQTTClient handle,//指向MQTT客户端句柄的指针。句柄被成功从函数中返回的客户端引用所填充MQTTClient_connectOptions * options //options 指向有效的MQTTClient_connectOptions结构的指针。
> 返回值
0 连接成功
1 拒绝连接:不可接受的协议版本。
2 拒绝连接:标识符被拒绝。
3 拒绝连接:服务器不可用。
4 拒绝连接:用户名或密码错误。
5 拒绝连接:未经授权。
6 保留给未来用。)
5丶DLLExport int MQTTClient_subscribe:尝试将客户订阅到单个主题,该主题可能包含通配符。 此函数还指定服务质量。
DLLExport int MQTTClient_subscribe ( MQTTClient handle,//指向MQTT客户端句柄的指针。句柄被成功从函数中返回的客户端引用所填充const char * topic,//订阅的主题,可使用通配符int qos //订阅的请求服务质量)
6丶MQTTClient_publishMessage:尝试将客户订阅到单个主题,该主题可能包含通配符。 此函数还指定服务质量
DLLExport int MQTTClient_publishMessage ( MQTTClient handle,//指向MQTT客户端句柄的指针。句柄被成功从函数中返回的客户端引用所填充const char * topicName,//与信息相关的主题。MQTTClient_message * msg,//指向有效的 MQTTClient_message 结构的指针, 其中包含要发布消息的有效负载和属性MQTTClient_deliveryToken * dt //指向MQTTClient_deliveryToken的指针。当函数成功返回时,dt会被赋值为代表消息的token。如果程序中没有使用传递token,将其设置为NULL。)
7丶MQTTClient_waitForCompletion:客户端应用程序调用此函数来将主线程的执行与消息的完成发布同步。 被调用时,MQTTClient_waitForCompletion()阻塞执行,直到消息成功传递或已超过指定的时间。
DLLExport int MQTTClient_waitForCompletion ( MQTTClient handle,//指向MQTT客户端句柄的指针。句柄被成功从函数中返回的客户端引用所填充MQTTClient_deliveryToken dt,//代表消息的MQTTClient_deliveryToken用来检测是否成功传递。传递token由发布函数MQTTClient_publish () 和 MQTTClient_publishMessage ()所产生。unsigned long timeout //等待的最大毫秒数)
8丶MQTTClient_receive:接收函数。
int MQTTClient_receive(
MQTTClient handle,//是执行函数MQTTClient_create函数返回的有效句柄char** topicName,//指向主题的指针的地址。这个函数为主题分配内存并将其返回给应用程序通过设置topicName指向主题。int* topicLen, //主题的长度。MQTTClient_message** message,//得到的message指针的地址unsigned long timeout)
linux下使用C语言实现MQTT通信(三丶总结经验)相关推荐
- linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程
linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程 server.c #include <sys/stat.h>#include <fcntl.h> ...
- linux下的C语言编程(总结篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在Linux下面关于C语言的内容其实挺多的.不同的人关注的地方也不一样.关注系统设计的人可能更 ...
- linux系统最好的c类语言开发软件,Linux下基于C 语言开发即时通信软件.doc
Linux下基于C 语言开发即时通信软件 Linux下基于C++语言开发即时通信软件 关键词:聊天软件 文字聊天 Linux平台 C/S架构ICE中间件 Linux-based instant mes ...
- linux下的C语言开发
在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正 ...
- Mysql —— linux下使用c语言访问mySql数据库
示例1: #include<stdio.h> #include<mysql.h> int main() { MYSQL mysql; mysql_init(&mysql ...
- Third Week :Linux下的C语言
Linux下的C语言 1. 搭建C语言开发环境/运行环境 1. 文本编辑 2. 编译器 3. 头文件和系统预装文件 4. make 工具 5. echo 2. 标准输入流/输出流/错误流 1. 重定向 ...
- linux c语言 信号,linux下基于C语言的信号编程实例
搜索热词 本文实例讲述了linux下基于C语言的信号编程方法.分享给大家供大家参考.具体如下: #include #include #include #include #include void si ...
- arm linux串口控制led,通信程序设计 - Linux下ARM和单片机的串口通信设计
3 通信程序设计 ARM 与单片机的串口通信程序包括两方面: 一方面是作为上位机的ARM 的串口通信程序,另一方面是作为下位机的单片机的串口通信程序.在通信之前必须制定合理的通信协议以保证通信的可靠性 ...
- Linux下C语言串口应用编程,Linux下串口C语言编程
Linux下串口C语言编程 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 串口操作代码#include #include #inclu ...
- c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...
求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束 /* 以下是主要的逻辑代码,还有些.c和.h就没发了 ...
最新文章
- 为Spring Cloud Config插上管理的翅膀
- canvas 文字颜色_实现一个canvas小画板
- Python 编码风格参考
- django 修改日期
- 都说做作设计要多看多参考,那哪里才能找到优秀原创设计作品?
- MongoDB 查询文档
- everything的使用
- LoadRunner教程(2)-LoadRunner性能测试利器
- driver其他常用的方法
- java使用egl_EGL 学习
- 新手入门,想用VB给班上写一个自动播放上下课铃声的程序,求教
- 别做被大公司毁掉的年轻人
- java-web实训项目:simonshop(3)Servlet层
- 浏览器UA,浏览器标识检测
- C语言数据结构——环形队列
- 2015年9月10日
- 数学与计算机学院校友会,福州大学数学与计算机科学学院厦门校友会成立
- 使用三台路由器实现wan与vlan通信
- 第一次用gcc命令时报错:gcc: 未找到命令...
- 可以自动采集的小说网站程序源码
热门文章
- canvas的width和style.width的区别
- 项目Beta冲刺(4/7)(追光的人)(2019.5.26)
- 1500w播放下还藏着什么热点?B站2个未来趋势你不得错过
- linux命令看进程的tcp链接,Linux下查看TCP连接的状态的shell命令
- matlab中ljnspace,Matlab图像感兴趣区域编码
- Netflix时代之后Spring Cloud微服务的未来
- java设计课堂派的教师端
- 90%程序员是这样写注释的...网友:精辟
- 数据中台在企业数字化转型中的践行(上篇)
- 数学之美番外篇:进化论中的概率论