mqtt协议的简单实用实例

以下是一个简单的使用C语言编程在嵌入式系统中实现MQTT协议的示例:

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

void on_connect(struct mosquitto *mqtt, void *userdata, int result) {
    if (result == 0) {
        printf("Connected to MQTT broker successfully!\n");
        mosquitto_subscribe(mqtt, NULL, "topic/example", 0); //订阅主题
    } else {
        printf("Failed to connect to MQTT broker\n");
    }
}

void on_message(struct mosquitto *mqtt, void *userdata, const struct mosquitto_message *message) {
    if (message->payloadlen) {
        printf("Received message: %s from topic: %s\n", (char *) message->payload, message->topic);
    } else {
        printf("Empty message received\n");
    }
}

int main() {
    struct mosquitto *mqtt;
    char client_id[] = "sample-client";
    char broker_address[] = "localhost";
    int port = 1883; //默认MQTT端口

    mosquitto_lib_init(); //初始化Mosquitto库

    mqtt = mosquitto_new(client_id, true, NULL);
    if (mqtt) {
        mosquitto_connect_callback_set(mqtt, on_connect);
        mosquitto_message_callback_set(mqtt, on_message);

        if (mosquitto_connect(mqtt, broker_address, port, 0) != MOSQ_ERR_SUCCESS) {
            printf("Unable to connect to the MQTT broker\n");
            return -1;
        }

        mosquitto_loop_start(mqtt); //启动MQTT循环

        //发送消息
        char message[] = "Hello, MQTT!";
        mosquitto_publish(mqtt, NULL, "topic/example", strlen(message), message, 0, false);

        //等待退出
        mosquitto_loop_stop(mqtt, true);

        mosquitto_destroy(mqtt);
    }

    mosquitto_lib_cleanup(); //清理Mosquitto库

    return 0;
}

在这个例子中,我们使用mosquitto库来实现MQTT协议的功能。首先,我们初始化库并创建一个MQTT客户端实例。然后,我们设置连接回调函数和消息回调函数,以便在连接建立和收到消息时进行相应的处理。接下来,我们尝试连接到MQTT代理,并订阅名为"topic/example"的主题。在连接成功后,我们启动MQTT循环以保持与代理的通信。通过mosquitto_publish函数,我们向"topic/example"主题发送一条消息。最后,我们等待循环停止,清理和销毁MQTT客户端实例。

请注意,上述代码仅作为简单示例,并且假设本地有一个名为"localhost"的MQTT代理运行在默认端口1883上。您可能需要根据实际情况进行适当的修改和配置。同时,确保已经在系统中安装了Mosquitto库,并在编译时链接正确的库文件。

猜你喜欢

转载自blog.csdn.net/FLM19990626/article/details/131409211
今日推荐