品牌建设ppt/网络优化公司排名

品牌建设ppt,网络优化公司排名,ui设计好学吗,满洲里建设局网站MQTT 文章目录 MQTT安装简介MQTT客户端代码 安装 安装Paho MQTT C库: sudo apt-get install libpaho-mqtt3-dev头文件包含: #include "MQTTClient.h"编译选项: gcc -o $ $^ -lpaho-mqtt3c简介 MQTT协议全称是(Message Queuing…

MQTT

文章目录

  • MQTT
    • 安装
    • 简介
    • MQTT客户端代码

安装

安装Paho MQTT C库:

sudo apt-get install libpaho-mqtt3-dev

头文件包含:

#include "MQTTClient.h"

编译选项:

gcc -o $@ $^ -lpaho-mqtt3c

简介

MQTT协议全称是(Message Queuing Telemetry Transport),即消息队列遥测传输协议。

是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,并且该协议构建于TCP/IP协议之上,TCP协议本身就具有高可靠性的特点,因此基于其上的MQTT协议同样也是具有高可靠、低开销的特点,之所以低开销,是以为MQTT协议传输的最小的报文也只有两个字节。

在物联网开发中,MQTT不是唯一的选择,与MQTT互相竞争的协议有XMPP和CoAP协议等。

关于发布和订阅的概念我们拿抖音平台来举个例子,我们每一个用户就都是一个客户端,而抖音就是MQTT协议中的服务器,当我们(用户一)关注某一个视频发布者(用户二)时,这样一个关注的行为就可以理解为订阅;同时用户二也可以关注你,那么这就是相互订阅。当用户二发布作品的时候,这个作品是发布到了抖音平台,也就是我们现在的服务器,这个过程就是消息的发布。

在这里需要注意的是:用户二(客户端)发布的消息并不是直接发布给了用户一,而是发布到了抖音平台(服务器),由于用户一订阅了用户二的消息(相当于点了关注),所以抖音平台(服务器)就会向用户一推送这个消息(注意发布和推送的区别)。这就是MQTT协议订阅&发布的一个简单比喻。

img

img

实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分

  • Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)
  • payload,可以理解为消息的内容,是指订阅者具体要使用的内容

MQTT客户端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MQTTClient.h"#define ADDRESS "thirdparty.mqtt.yoplore.com"  //服务器的IP地址
#define CLIENTID "client01"   //发布者的姓名(唯一的,如果发布者和订阅者用同一个姓名,就会出现顶号的现象)
#define TOPIC1 "MQTT topic/topic1"              //订阅主题
#define TOPIC2 "MQTT topic/topic2"              //订阅主题
#define QOS 1                              //服务登记(0.最多一次,1.最少一次,2.确保一次)
#define TIMEOUT 10000L                     //响应时间//定义一个传递令牌
volatile MQTTClient_deliveryToken deliveredtoken;//令牌交付回调函数,当消息成功交付给 MQTT 服务器时调用
/**context:用户自定义的上下文指针,此处未使用dt:消息交付的令牌
*/
void delivered(void *context, MQTTClient_deliveryToken dt)
{printf("Message with token value %d delivery confirmed\n", dt);deliveredtoken = dt;
}//接受订阅信息的回调函数,当接收到订阅主题的消息时调用
/**context:用户自定义的上下文指针,此处未使用topicName:接收到消息的主题名称topicLen:主题名称的长度message:接收到的 MQTT 消息结构体指针
*/
int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)
{int i;char *payloadptr;printf("Message arrived\n");printf("topic: %s\n", topicName);printf("message: ");payloadptr = message->payload;for (i = 0; i < message->payloadlen; i++){putchar(*payloadptr);payloadptr++;}putchar('\n');MQTTClient_freeMessage(&message);MQTTClient_free(topicName);return 1;
}
//断开链接的回调函数
void connlost(void *context, char *cause)
{printf("\nConnection lost\n");printf("cause: %s\n", cause);
}int main(int argc, char *argv[])
{printf("\nCreating MQTTClient\n");// 消息缓冲区char buf[1024];// 1、定义一个MQTT客户端结构体指针MQTTClient client;// 2、创建一个MQTT客户端MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;MQTTClient_create(&client, ADDRESS, CLIENTID,MQTTCLIENT_PERSISTENCE_NONE, NULL);conn_opts.keepAliveInterval = 20;// 连接保活时间conn_opts.cleansession = 1; // 设置是否清除会话,1为清除// 定义一个 MQTT 消息结构体,用于存储要发布的消息MQTTClient_message publish_msg=MQTTClient_message_initializer;// 令牌tokenMQTTClient_deliveryToken token;// 设置回调MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered);// 链接int rc = MQTTClient_connect(client, &conn_opts);if (rc != MQTTCLIENT_SUCCESS) {printf("Failed to connect, return code %d\n", rc);return EXIT_FAILURE;}// 订阅多个主题rc = MQTTClient_subscribe(client, TOPIC1, QOS);if (rc != MQTTCLIENT_SUCCESS) {printf("Failed to subscribe to %s, return code %d\n", TOPIC1, rc);return EXIT_FAILURE;}rc = MQTTClient_subscribe(client, TOPIC2, QOS);if (rc != MQTTCLIENT_SUCCESS) {printf("Failed to subscribe to %s, return code %d\n", TOPIC2, rc);return EXIT_FAILURE;}//用户退出char ch;while (1) {// 发送信息printf("请输入要发布的内容(输入 'q' 或 'Q' 退出):\n");if (fgets(buf, sizeof(buf), stdin) == NULL) {printf("读取输入失败\n");continue;}// 去除换行符(fgets会将换行符一并读取)size_t len = strlen(buf);if (len > 0 && buf[len - 1] == '\n') {buf[len - 1] = '\0';}// 检查是否退出if (buf[0] == 'q' || buf[0] == 'Q') {break;}publish_msg.payload = (void *)buf;publish_msg.payloadlen = strlen(buf);rc = MQTTClient_publishMessage(client, TOPIC2, &publish_msg, &token);//用于将消息发布到指定的主题if (rc != MQTTCLIENT_SUCCESS) {printf("Failed to publish message, return code %d\n", rc);continue;}rc = MQTTClient_waitForCompletion(client, token, 1000); //用于等待指定的消息交付完成if (rc != MQTTCLIENT_SUCCESS) {printf("Failed to wait for message completion, return code %d\n", rc);continue;}printf("buf中的内容: %s\n", buf);}MQTTClient_disconnect(client,10000);MQTTClient_destroy(&client);printf("\nExiting\n");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Python+Flask打造可视化武侠人物关系图生成器:从零到一的实战全记录

用PythonFlask打造可视化武侠人物关系图生成器&#xff1a;从零到一的实战全记录 一、缘起&#xff1a;一个程序小白的奇妙探索之旅 作为一个接触Python仅13天的编程萌新&#xff0c;我曾以为开发一个完整的应用是遥不可及的事情。但在DeepSeek的帮助下&#xff0c;我竟用短短…

Docker 学习(二)——基于Registry、Harbor搭建私有仓库

Docker仓库是集中存储和管理Docker镜像的平台&#xff0c;支持镜像的上传、下载、版本管理等功能。 一、Docker仓库分类 1.公有仓库 Docker Hub&#xff1a;官方默认公共仓库&#xff0c;提供超过10万镜像&#xff0c;支持用户上传和管理镜像。 第三方平台&#xff1a;如阿里…

js的简单介绍

一.javascript&#xff08;是什么&#xff09; 是一种运行在客户端(浏览器)的编程语言&#xff0c;实现人机交互效果 作用 网页特效&#xff08;监听客户的一些行为让网页做出对应的反馈&#xff09;表单验证(针对表格数据的合法性进行判断)数据交互(获取后台的数据&#xf…

k8s架构及服务详解

目录 1.1.容器是什么1.2.Namespace1.3.rootfs5.1.Service介绍5.1.1.Serice简介 5.1.1.1什么是Service5.1.1.2.Service的创建5.1.1.3.检测服务5.1.1.4.在运行的容器中远程执行命令 5.2.连接集群外部的服务 5.2.1.介绍服务endpoint5.2.2.手动配置服务的endpoint5.2.3.为外部服务…

01. HarmonyOS应用开发实践与技术解析

文章目录 前言项目概述HarmonyOS应用架构项目结构Ability生命周期 ArkTS语言特性装饰器状态管理 UI组件与布局基础组件响应式布局样式与主题 页面路由与参数传递页面跳转参数接收 数据绑定与循环渲染数据接口定义循环渲染 条件渲染组件生命周期最佳实践与性能优化组件复用响应式…

【Python 数据结构 5.栈】

目录 一、栈的基本概念 1.栈的概念 2.入栈 入栈的步骤 3.出栈 出栈的步骤 4.获取栈顶元素 获取栈顶元素的步骤 二、 Python中的栈 顺序表实现 链表实现 三、栈的实战 1.LCR 123. 图书整理 I 思路与算法 2.LCR 027. 回文链表 思路与算法 3.1614. 括号的最大嵌套深度 思路与算法 …

Machine Learning 初探

前置知识 pandas 读取文件&#xff1a;read_csv查看信息 describe&#xff1a;查看整体信息&#xff0c;包括每列的平均值、最大最小值、标准差等head&#xff1a;输出头部几行数据columns&#xff1a;输出所有列名loc&#xff1a;查询数据&#xff0c;或是根据索引取对应的数…

SpringBoot @ConfigurationProperties 注解使用

ConfigurationProperties 用于将配置文件&#xff08;如 application.properties 或 application.yml&#xff09;中的属性批量绑定到一个 Java Bean 中。 1. 定义配置文件 在 application.properties 或 application.yml 中定义一组具有相同前缀的属性。 application.yml &a…

MFC: 控件根据文本内容大小自动调整

背景&#xff1a; 针对不同语言下&#xff0c;控件显示不全的现象&#xff1b; 例如&#xff1a; 现象1&#xff1a;中文下显示全部信息&#xff0c;英语下只能显示部分文字 现象2&#xff1a;中文下显示不全## 实现思路&#xff1a; 控件绑定按钮计算控件文本长度根据文本长…

SpringBoot 整合mongoDB并自定义连接池,实现多数据源配置

要想在同一个springboot项目中使用多个数据源&#xff0c;最主要是每个数据源都有自己的mongoTemplate和MongoDbFactory。mongoTemplate和MongoDbFactory是负责对数据源进行交互的并管理链接的。 spring提供了一个注解EnableMongoRepositories 用来注释在某些路径下的MongoRepo…

软件测试中的BUG

文章目录 软件测试的生命周期BugBug 的概念描述 Bug 的要素案例Bug 级别Bug 的生命周期与开发产生争执怎么办&#xff1f;【高频面试题】先检查自身&#xff0c;Bug 是否描述的不清楚站在用户角度考虑并抛出问题Bug 的定级要有理有据提⾼自身技术和业务水平&#xff0c;做到不仅…

泵吸式激光可燃气体监测仪:快速精准守护燃气管网安全

在城市化进程加速的今天&#xff0c;燃气泄漏、地下管网老化等问题时刻威胁着城市安全。如何实现精准、高效的可燃气体监测&#xff0c;守护“城市生命线”&#xff0c;成为新型基础设施建设的核心课题。泵吸式激光可燃气体监测仪&#xff0c;以创新科技赋能安全监测&#xff0…

摄像头应用编程(三):多平面视频采集

文章目录 1、前言2、环境介绍3、步骤4、应用程序编写5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 在查看摄像头类型时&#xff0c;大致可以分为两类&#xff1a;Video Capture 和 Video Capture Multiplanar。 本次应用程序主要针对类型为Video Capture Multi…

三维数据可视化与表面重建:Marching Cubes算法的原理与应用

1. 引言 随着现代医学影像技术的飞速发展&#xff0c;三维数据的可视化与重建已成为医学研究、临床诊断和手术规划的重要工具。在众多三维重建算法中&#xff0c;Marching Cubes算法因其高效、稳定的特性成为从离散数据场中提取等值面的经典方法。本报告将深入探讨Marching Cu…

11.【线性代数】——矩阵空间,秩1矩阵,小世界图

十一 矩阵空间&#xff0c;秩1矩阵&#xff0c;小世界图 1. 矩阵空间交集 和 和集 2. 所有解空间3. r 1 r1 r1的矩阵4. 题目5. 小世界图 空间&#xff1a;组成空间的元素的线性组合都在这个空间中。 1. 矩阵空间 举例&#xff1a;矩阵空间&#xff08; M M M 所有3x3的矩阵&…

【网络安全 | 渗透测试】GraphQL精讲一:基础知识

未经许可,不得转载, 文章目录 GraphQL 定义GraphQL 工作原理GraphQL 模式GraphQL 查询GraphQL 变更(Mutations)查询(Queries)和变更(Mutations)的组成部分字段(Fields)参数(Arguments)变量别名(Aliases)片段(Fragments)订阅(Subscriptions)自省(Introspecti…

关于虚拟环境中遇到的bug

conda和cmd介绍 介绍 Conda 概述&#xff1a; Conda是一个开源包管理系统和环境管理系统&#xff0c;尤其适用于Python和R语言的开发环境。它允许用户创建独立的虚拟环境&#xff0c;方便地管理依赖包和软件版本。 特点&#xff1a; 环境管理&#xff1a;可以创建、导入、导…

网络安全法与等级保护 PPT 精华汇总

资源描述 本资源文件为《网络安全法与等级保护》的PPT精华汇总&#xff0c;内容涵盖了网络安全法与等级保护的总体框架及相关标准规范。该PPT详细介绍了网络安全法与等级保护的各个章节和条款&#xff0c;并提供了基础类和应用类的相关标准文件&#xff0c;帮助读者全面了解和…

uni-app开发安卓和iOS 打包流程(云打包)

首先讲一下安卓打包的流程,之后再说ios。打包安卓和iOS打包的流程有些不同,安卓打包相对来说比较简单,而iOS打包需要更多的准备工作,如申请开发者账号、生成证书等。 一、安卓打包 1、安卓打包直接在window电脑上就可以操作,打开hbuilderx,找到你的项目选中,然后点击发…

摄像头应用编程(四):ARM Linux LCD实时预览UVC摄像头画面

文章目录 1、前言2、环境介绍3、步骤4、应用程序编写4.1、lcd初始化4.2、摄像头初始化4.3、jpeg解码4.4、开启摄像头4.5、完整的程序如下 5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 本次应用程序主要针对支持MJPEG格式输出的UVC摄像头。 2、环境介绍 rk35…