首页 > 其他分享 >mqtt mosquitto开源库实现

mqtt mosquitto开源库实现

时间:2024-07-17 15:59:15浏览次数:9  
标签:return mqtt MQTT client mosquitto connect printf 开源

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

文章目录


前言

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

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来进行通信。

标签:return,mqtt,MQTT,client,mosquitto,connect,printf,开源
From: https://blog.csdn.net/qq_37077309/article/details/140467363

相关文章

  • 钡铼Profinet、EtherCAT、Modbus、MQTT、Ethernet/IP、OPC UA分布式IO系统BL20X系列耦
    BL20X系列耦合器是钡铼技术开发的一款用于分布式I/O系统的设备,专为工业环境下的高速数据传输和远程设备控制而设计,支持多种工业以太网协议,包括Profinet、EtherCAT、Modbus、MQTT、Ethernet/IP和OPCUA等。如果您正在考虑部署BL20X系列耦合器又不知选择哪款,那不妨来看一看钡铼......
  • 探讨开源项目的机遇与挑战
    ✨✨欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨......
  • 好用的开源移动端低代码平台有哪些
    移动APP、H5、小程序曾风靡一时,结合当前无代码/低代码开发技术,有哪些免费开源的移动端H5/小程序软件,不用写代码即可发布H5页面,笔者对市场上主流的开源H5低代码/无代码工具/框架/组件进行了研究和验证,找到了几款比较好用的移动端H5无代码/低代码设计器,供大家选型参考。1、h5-doori......
  • .NET开源、简单、实用的数据库文档生成工具
    前言今天大姚给大家分享一款.NET开源(MITLicense)、免费、简单、实用的数据库文档(字典)生成工具,该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等多文档格式的导出:DBCHM。支持的数据库SqlServer、MySQL、Oracle、PostgreSQL、DB2、SQLite。文档的内容都包含什么?序号|......
  • MarkText A simple and elegant markdown editor, available for Linux, macOS and Wi
    1、这个工具挺不错的,先上一张图,来自github页面截图:2、这个工具是开源的项目,开源地址:https://github.com/marktext官网地址:www.marktext.cc/三个平台都有:可以直接点上面的按钮,找到自己所用电脑的平台,就可以下载。也可以转到Githubreleasepage下载。3、安装:点击【安......
  • 字节跳动内网开源的《Python项目开发实战》,GitHub飙升!
    今天给小伙伴们分享的这份手册的内容共15个章节,总共可以分为四个部分。第一部分,主要讲“Python开发入门”,这部分将重点放在了个人开发上,涵盖了简单的web应用开发和Python项目结构等。第二部分,主要讲“团队开发周期”,介绍书中的极客们在多人团队开发中遇到的问题,以及如何提......
  • (开源)都进来!简单易懂、功能强大的权限+可视化流程管理系统
    1、预览地址:http://139.155.137.144:90122、qq群:801913255一、前言随着网络的发展,企业对于信息系统数据的保密工作愈发重视,不同身份、角色对于数据的访问权限都应该大相径庭。列如1、不同登录人员对一个数据列表的可见度是不一样的,如数据列、数据行、数据按钮等......
  • 推荐2款.NET开源、轻便、实用的Windows桌面启动器
    FlowLauncherFlowLauncher是一款.NET开源(MITLicense)、免费、功能强大、方便实用的Windows文件搜索和应用程序启动器,能够帮助你快速查找文件、启动应用程序和执行系统操作,提高工作效率和操作便利性。并且生态完善,有插件商店,你可以查看完整的插件列表,或通过"设置"中的"插件......
  • 开发必备,开源免费的 AI 编程助手
    AI大模型的火热,让开发圈近来如虎添翼,各种各样基于AI技术的开发者工具和新范式不断涌现,尤其是Github和OpenAI共同推出的CopilotX,更是一骑绝尘。本文推荐一些开源or免费的AI编程工具,不妨试着用起来。CodeGeeX有人称CodeGeeX是国产之光,被认为是GitHubCopilot......
  • 第二部分:关键技术领域的开源实践【高性能Web服务器和反向代理服务器的代名词】
    Nginx能够解决企业中多种常见的痛点需求,尤其在高流量、高性能和安全性方面表现突出。以下是Nginx可以帮助企业解决的一些主要痛点:高并发处理能力:Nginx使用异步非阻塞的事件驱动架构,这使得它能够高效地处理大量并发连接。对于访问量大的网站或服务,Nginx可以显著提高响应速......