linux下使用C语言实现MQTT通信(三丶总结经验)

在做MQTT时遇到了很多困难,从无到有,也收获了许多,下面就来总结一下我做本项目的心得;
一丶学会了使用yEd Graph Editor软件作图,(虽然做的很丑!),以前在写程序的时候就是闷头写,根本不画流程图,出现了bug解决不了又不知道从哪里改起,所以现在学会了画流程图写代码变得轻松了,该软件的下载地址:https://www.yworks.com/products/yed

二丶学习了许多关于MQTT的函数,下面就来介绍一下这些函数:
1丶MQTTClient_message:客户端的信息函数。

typedef struct
{
    char struct_id[4];//结构体的识别序列,为MQTM
    int struct_version;//结构体的版本,为0
    int 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)
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Linux系统下使用C语言实现MQTT客户端程序,可以按照以下步骤进行: 1. 首先,需要安装用于MQTT通信C语言库。常见的MQTT库有Paho MQTT C库和Mosquitto MQTT C库,你可以选择其中一个进行安装。 2. 安装完成后,创建一个新的C文件,用于编写MQTT客户端程序的代码。 3. 在程序中包含MQTT库的头文件,并进行必要的初始化。例如,使用Paho MQTT C库,可以包含`"MQTTClient.h"`头文件,并通过`"MQTTClient_create()"`函数创建一个MQTT客户端实例。 4. 设置MQTT客户端连接的服务器地址和端口号。这可以通过使用`"MQTTClient_setOptions()"`函数来完成。 5. 定义一个回调函数,用于处理从MQTT服务器接收到的消息。例如,使用Paho MQTT C库,可以使用`"MessageArrived()"`函数来处理接收到的消息,并将其打印出来。 6. 使用`"MQTTClient_connect()"`函数连接到MQTT服务器。 7. 使用`"MQTTClient_subscribe()"`函数订阅你感兴趣的主题。 8. 实现发送MQTT消息的功能。可以使用`"MQTTClient_publish()"`函数发送消息到MQTT服务器。 9. 最后,使用`"MQTTClient_disconnect()"`函数断开与MQTT服务器的连接,并进行必要的资源清理。 10. 编译并运行你的程序。 总之,要在Linux系统下使用C语言实现MQTT客户端程序,你需要选择并安装一个MQTT库,创建一个新的C文件并编写相关代码,包括初始化、连接服务器、订阅主题、发送和接收消息等功能。最后,编译并运行你的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值