C++ MQTT客户端库libmosquitto使用介绍

发布于:2024-12-18 ⋅ 阅读:(62) ⋅ 点赞:(0)

libmosquitto 是一个用于实现 MQTT 协议的 C 语言客户端库,它允许开发者在应用程序中集成 MQTT 功能,进行消息的发布和订阅。以下是 libmosquitto 库的基本用法和代码示例:

1. 初始化和清理

在使用 libmosquitto 之前,需要初始化库,并在程序结束时清理资源:

mosquitto_lib_init(); // 初始化 libmosquitto 库
// ... 代码 ...
mosquitto_lib_cleanup(); // 清理 libmosquitto 库

2. 创建和配置客户端

创建一个新的 MQTT 客户端实例,并设置相关回调函数:

struct mosquitto *mosq = mosquitto_new(NULL, true, NULL); // 创建客户端实例
mosquitto_connect_callback_set(mosq, my_connect_callback); // 设置连接回调
mosquitto_message_callback_set(mosq, my_message_callback); // 设置消息回调

3. 连接到 MQTT 代理

连接到 MQTT 代理服务器:

int ret = mosquitto_connect(mosq, "localhost", 1883, 60); // 连接到本地 MQTT 代理
if (ret != MOSQ_ERR_SUCCESS) {
    fprintf(stderr, "Unable to connect.\n");
    return 1;
}

4. 订阅主题

订阅一个或多个 MQTT 主题:

mosquitto_subscribe(mosq, NULL, "my/topic", 0); // 订阅 "my/topic" 主题

5. 发布消息

发布消息到指定的主题:

mosquitto_publish(mosq, NULL, "my/topic", strlen("Hello World"), "Hello World", 0, 0);

6. 网络循环处理

启动网络循环,处理 MQTT 网络事件:

mosquitto_loop_start(mosq); // 启动网络循环
// ... 代码 ...
mosquitto_loop_stop(mosq, true); // 停止网络循环

7. 断开连接和销毁客户端

在程序结束时,断开与 MQTT 代理的连接,并销毁客户端实例:

mosquitto_disconnect(mosq); // 断开连接
mosquitto_destroy(mosq); // 销毁客户端实例

完整的客户端示例代码

以下是一个完整的 MQTT 客户端示例代码,包括订阅和发布功能:

#include <stdio.h>
#include <stdlib.h>
#include <mosquitto.h>

#define HOST "localhost"
#define PORT 1883
#define KEEP_ALIVE 60

void my_message_callback(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message) {
    if (message->payloadlen) {
        printf("%s %s\n", message->topic, message->payload);
    } else {
        printf("%s (null)\n", message->topic);
    }
    fflush(stdout);
}

void my_connect_callback(struct mosquitto *mosq, void *userdata, int result) {
    if (!result) {
        mosquitto_subscribe(mosq, NULL, "my/topic", 0);
    } else {
        fprintf(stderr, "Connect failed\n");
    }
}

int main() {
    struct mosquitto *mosq;
    mosquitto_lib_init();
    mosq = mosquitto_new(NULL, true, NULL);
    if (!mosq) {
        fprintf(stderr, "Error: Out of memory.\n");
        return 1;
    }
    mosquitto_connect_callback_set(mosq, my_connect_callback);
    mosquitto_message_callback_set(mosq, my_message_callback);
    
    if (mosquitto_connect(mosq, HOST, PORT, KEEP_ALIVE)) {
        fprintf(stderr, "Unable to connect.\n");
        return 1;
    }
    
    mosquitto_loop_forever(mosq, -1, 1);
    
    mosquitto_destroy(mosq);
    mosquitto_lib_cleanup();
    return 0;
}

在编译程序时,需要链接 libmosquitto 库:

gcc -o mosquitto_client mosquitto_client.c -lmosquitto -lpthread

以上代码展示了如何使用 libmosquitto 库创建一个 MQTT 客户端,连接到 MQTT 代理,订阅和接收消息。


网站公告

今日签到

点亮在社区的每一天
去签到