mqtt mosquitto开源库实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

mosquitto开源库实现简单的 mqtt发布和订阅功能程序。


提示:以下是本篇文章正文内容,下面案例可供参考

一、MQTT是什么?

mosquitto 是一个非常流行的开源 MQTT(Message Queuing Telemetry Transport)消息代理,用于在设备间发布/订阅轻量级的消息。MQTT 是一个专门为低带宽和高延迟的网络设计的发布/订阅模式的通信协议,非常适合物联网(IoT)场景。

MQTT的主要特点包括:

1,发布/订阅模型:MQTT采用发布/订阅模型,客户端(发布者)将消息发送到代理(Broker),代理再将消息转发给所有订阅了该主题的客户端(订阅者)。这种模型解耦了消息的发送者和接收者,使得它们可以独立地进行通信。
2,轻量级:MQTT协议非常小巧,消息格式简单,这使得它非常适合在资源受限的设备(如传感器、嵌入式设备等)上运行。
3,可靠的传输:MQTT提供了三种消息传递服务质量(QoS)级别:
QoS 0:最多一次传递,不保证消息到达。
QoS 1:至少一次传递,确保消息到达,但可能会有重复。
QoS 2:恰好一次传递,确保消息只被传递一次。
4,灵活的主题:MQTT允许客户端通过主题(Topic)进行订阅和发布,主题可以非常灵活地进行设计,以支持不同的消息过滤需求。
5,广泛的平台支持:MQTT得到了广泛的支持,包括各种编程语言、框架和平台。这使得开发者可以很容易地将MQTT集成到他们的项目中。
6,安全性:MQTT协议支持通过TLS/SSL加密来确保消息的安全性,同时还支持用户名/密码认证和SSL/TLS证书认证等多种认证机制。

下面的代码实现两个客户端使用发布订阅通信。

二、使用步骤

1.服务器配置安装并开启mosquitto

yum install mosquitto
systemctl start mosquitto

2.客户端代码

public

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

#define DEVICE_ID "JHKLHHB00987665"

static void on_connect(struct mosquitto *mosq, void *obj, int result)
{
    if(result == 0){
        printf("Publisher connected to Mosquitto Broker\n");
    } else {
        printf("Failed to connect, return code %d\n", result);
        return;
    }
    return;
}

static void on_disconnect(struct mosquitto *mosq, void *obj, int result)
{
    if(result != 0){
        printf("Publisher disconnected unexpectedly\n");
    } else {
        printf("Publisher disconnected normally\n");
    }
}

int main(int argc, char* argv[])
{
    struct mosquitto *client;
    int rc;

    client = mosquitto_new("publisher", true, NULL);
    if(!client){
        printf("Error creating publisher client\n");
        return 1;
    }

    mosquitto_connect_callback_set(client, on_connect);
    mosquitto_disconnect_callback_set(client, on_disconnect);

    rc = mosquitto_connect(client, "localhost", 1883, 60);
    if(rc != 0){
        printf("Error connecting to broker\n");
        mosquitto_destroy(client);
        return 1;
    }

    char topic[50];
    snprintf(topic, sizeof(topic), "sensors/temperature/%s", DEVICE_ID);

    mosquitto_publish(client, NULL, topic, strlen("Hello World"), "Hello World", 0, false);

    mosquitto_disconnect(client);
    mosquitto_destroy(client);

    return 0;
}

subscribe

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

static void on_connect(struct mosquitto *mosq, void *obj, int result)
{
    if(result == 0){
        printf("Subscriber connected to Mosquitto Broker\n");
    } else {
        printf("Failed to connect, return code %d\n", result);
        return;
    }
    mosquitto_subscribe(mosq, NULL, "sensors/temperature/+", 0);
    return;
}

static void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message)
{
    printf("Received message '%s' on topic '%s' with QoS %d\n",
           message->payload, message->topic, message->mid);
}

int main(int argc, char* argv[])
{
    struct mosquitto *client;
    int rc;

    client = mosquitto_new("subscriber", true, NULL);
    if(!client){
        printf("Error creating subscriber client\n");
        return 1;
    }

    mosquitto_connect_callback_set(client, on_connect);
    mosquitto_message_callback_set(client, on_message);

    rc = mosquitto_connect(client, "localhost", 1883, 60);
    if(rc != 0){
        printf("Error connecting to broker\n");
        mosquitto_destroy(client);
        return 1;
    }

    mosquitto_loop_forever(client, -1, 1);

    mosquitto_disconnect(client);
    mosquitto_destroy(client);

    return 0;
}

编译需要添加 -lmosquitto
gcc publisher.c -o publisher -lmosquitto
gcc subscriber.c -o subscriber -lmosquitto


总结

mosquitto客户端简单使用例子,可以运行,不同的机器应该可以更换客户端ip来进行通信。

  • 21
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值