Linux C应用编程:MQTT物联网

1 MQTT通信协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传 输)是一种基于客户端-服务端架构的消息传输协议,如今,MQTT 成为了最受欢迎的物联网协议,已广泛应用于车联网、智能家居、即时聊天应用和工业互 联网等领域。

 1.1 MQTT 报文组成部分

固定头(Fixed header)、可变头(Variable header)以及有效载荷(Payload,消息体)。

  • 固定头(Fixed header):存在于所有 MQTT 报文中,固定头中有报文类型标识,可用于识别是哪 种 MQTT 报文,譬如该报文是 CONNECT 报文还是 CONNACK 报文,亦或是其它类型报文。
  • 可变头(Variable header):存在于部分类型的 MQTT 报文中,报文的类型决定了可变头是否存 在及其具体的内容。
  • 消息体(Payload):存在于部分类型的 MQTT 报文中,payload 就是消息载体的意思。

关于 MQTT 协议的参考资料,链接地址如下:MQTT 协议参考资料 

1.2 MQTT 客户端连接服务端步骤

  1. 首先客户端需要向服务端发送连接请求,这个连接请求实际上就是向服务端发送一个 CONNECT 报文,也就是发送了一个 CONNECT 数据包。
  2. MQTT 服务端收到连接请求后,会向客户端发送连接确认。连接确认实际上是向客户端发送一个 CONNACK 报文,也就是 CONNACK 数据包。

 1.3 MQTT 客户端与服务端断开连接

如果客户端想要断开与服务端的连接,此时客户端可以主动向服务端发送一个 DISCONNECT 报文来断开与服务端的连接

1.4 发布消息、订阅主题与取消订阅主题

1.4.1 PUBLISH–发布消息

当客户端连接到服务端之后,就可以向服务端发布消息了,每条发布的消息必须指定一个“主题”,表示向某主题发布消息;MQTT 服务端可以通过主题来确定将消息转发给哪些客户端(订阅了该主题的客户端)

1.4.2 SUBSCRIBE--订阅主题

当客户端连接到服务端后,除了可以发布消息,也可以接收消息,客户端要想接收消息,首先要订阅该消息的主题。这样,当有客户端向该主题发布消息后, 订阅了该主题的客户端就能接收到消息了。

当客户端向服务端发送 SUBSCRIBE 报文,服务端接收到 SUBSCRIBE 报文之后会向客户端回复一个 SUBACK 报文(订阅确认报文),SUBACK 报文包含有“订阅返回码”和“报文标识符”这两个信息。

由上表可知,当 returnCode=0、1 或 2 这三种情况时,都表示订阅成功;具体返回的数字是多少,根据 订阅主题时 QoS 的不同,服务端的返回码也会有所不同!

1.4.3 UNSUBSCRIBE--取消订阅主题

客户端通过向服务端发送一个 UNSUBSCRIBE 报文来取消订阅主题,当服务端接收到 UNSUBSCRIBE 报文后,会向发送方回复一个 UNSUBACK 报文(取消订阅确认报文),客户端接收到 UNSUBACK 报文后就可以确认取消主题订阅已经成功完成了。

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

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

相关文章

不想升级到win11要怎么取消,怎么拒绝升级win11

微软公布了一个会导致win11数据损坏的罪魁祸首,受到影响的win11系统,是搭载了支持最新VAES指令集的处理器。这次的bug是坑了intel用户呀,Intel从10代酷睿(Ice Lake )和第三代至强可扩展处理器(IceLake-SP)开始才添加了对VAES的支持,AMD这边则是Zen 3锐龙5000,它也是AVX-51…

太好玩了,我用 Python 做了一个 ChatGPT 机器人

毫无疑问,ChatGPT 已经是当下编程圈最火的话题之一,它不仅能够回答各类问题,甚至还能执行代码! 或者是变成一只猫 因为它实在是太好玩,我使用Python将ChatGPT改造,可以实现在命令行或者Python代码中调用。…

手动实现简易版RPC(上)

手动实现简易版RPC(上) 前言 什么是RPC?它的原理是什么?它有什么特点?如果让你实现一个RPC框架,你会如何是实现?带着这些问题,开始今天的学习。 本文主要介绍RPC概述以及一些关于RPC的知识,为…

【电子通识】吸锡带/线的作用和替代方法

吸锡带简介 吸锡带(或称吸锡线、脱焊织物)是手工焊接的好助手,手焊或维修时吸锡带能够去除电路板上多余焊锡,减少了电子产品的返工和修理的时间,降低了烙铁对电路板造成过热损伤的危险,因此是一个既廉价又有效的物品。 市面上卖的最多的的吸锡带类型如下所示: 吸锡带的选型…

普乐蛙VR神州飞船设备VR太空舱体验馆VR博物馆

中国航天式浪漫知多少?千百年来古人对浩瀚宇宙有着无尽的浪漫想象,而在一代又一代中国航天事业奋斗者的努力中,远古神话不再是幻想,它终被照进现实——中国载人飞船“神舟”、中国载人空间站“天宫”、中国绕月人造卫星“嫦娥一号…

二叉树例题分享

文章目录 二叉树例题分享[235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)[701. 二叉搜索树中的插入操作](https://leetcode.cn/problems/insert-into-a-binary-search-tree/)[108. 将有序数组转换为二叉搜索树…

python怎么输出小数

先将整型转换成float型,再进行计算,结果就有小数了。 >>> a 10 >>> b 4 >>> c a/b >>> a,b,c (10, 4, 2) >>> a float(a) >>> d a/b >>> a,b,d (10.0, 4, 2.5) >>> 注意&…

LabVIEW闭环步进电机运动系统设计及精度分析

LabVIEW闭环步进电机运动系统设计及精度分析 在自动化设备不断发展的当代,闭环步进电机以其高精度和可靠性成为了自动化设备的重要组成部分。以LabVIEW软件为核心,结合运动控制卡及驱动器模块,设计并实现了一个闭环步进电机的多轴运动控制系…

speccpu2017安装与使用

国产化桌面下Speccpu2017安装与使用 1、 安装依赖库 安装speccpu2017前需要安装依赖包,通过终端命令对依赖包进行安装 sudo apt-get install gcc g gfortran (以上是已经安装好的) 注:若安装不上,需替换/etc/apt下的s…

架构师系列-搜索引擎ElasticSearch(七)- 集群管理之分片

集群健康检查 Elasticsearch 的集群监控信息中包含了许多的统计数据,其中最为重要的一项就是集群健康,它在 status字段中展示为 green(所有主分片和副本分片都正常)、yellow(所有数据可用,有些副本分片尚未…

nodejs解析url参数

需要引入 url 模块; var http require(http); var url require(url);http.createServer(function (req, res) {res.writeHead(200, {Content-Type: text/plain});// 解析 url 参数var params url.parse(req.url, true).query;res.write("name: " par…

IMU用于识别截肢者步态

最近,一个来自秘鲁天主教大学的研究小组利用了IMU和EMG传感器技术,对截肢者和非截肢者的行走方式进行区分和分类研究,其目标在于优化智能假肢的功能表现,从而提升穿戴者的生活质量及活动能力。 该实验采用了全面的数据集分布策略…

ODI(境外投资备案)作用、类别和申请流程详解

中国企业越来越多地选择在境外进行投资,而国家相关部门也出台了多项政策以规范这一行为。在进行海外投资前,企业必须在政策指导下进行合法操作并办理相应手续,其中ODI(境外投资备案)是其中一种最常见的方式之一。 以…

接口自动化入门:JSON中的万能密码 —— JSON Path解析!

JSON (JavaScript Object Notation) 是一种常用的数据格式,用来存储和传输结构化的数据。在接口自动化中,我们经常需要对返回的 JSON 数据进行解析,以提取需要的信息。JSON Path 是一种用于查询和筛选 JSON 数据的表达式语言,类似…

腾讯客户端开发实习一面

听说腾讯25年5000offer,我就去了...投完简历,当天晚上做完测评,第二天下午打电话约了第三天面试,额流程很快,快到第三天就寄了... 写在这里做个记录,也可以给学习学妹们经验,文末也有大厂面经合…

【深入理解Java IO流0x09】解读Java NIO核心知识(下篇)

1. NIO简介 在开始前,让我们再简单回顾一下NIO。 在传统的 Java I/O 模型(BIO)中,I/O 操作是以阻塞的方式进行的。也就是说,当一个线程执行一个 I/O 操作时,它会被阻塞直到操作完成。这种阻塞模型在处理多…

火绒安全的用法

火绒安全软件是一款综合性的电脑安全防护工具,提供了病毒查杀、系统防护、网络安全等多种功能,以帮助用户保护电脑免受恶意软件和网络威胁的侵害。以下是火绒安全软件的一些主要用法: 病毒查杀:火绒安全软件提供全盘查杀、快速查杀…

Nvidia DGX 系统分析和探讨

NVIDIA DGX 互联结构 NVIDIA DGX 是Nvidia 推出的turnkey 解决方案,其中按照组合关系: DGX GB200 System: NVL72 36 Nvidia Grace CPU72 BlackWell GPU每台机柜包含18 个GB200 计算节点,每个节点包含2 个GB200s9 个NVSwitches Tray 节点,每个…

MyBatis-Spring整合

引入Spring之前需要了解mybatis-spring包中的一些重要类; http://www.mybatis.org/spring/zh/index.html 什么是 MyBatis-Spring? MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 知识基础 在开始使用 MyBatis-Spring 之前&#x…

Windows本地部署Ollama+qwen本地大语言模型Web交互界面并实现公网访问

文章目录 前言1. 运行Ollama2. 安装Open WebUI2.1 在Windows系统安装Docker2.2 使用Docker部署Open WebUI 3. 安装内网穿透工具4. 创建固定公网地址 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具,并安装Open WebUI结合cpolar内网穿透软…