MQTT协议-订阅主题和订阅确认

news2024/10/2 1:21:38

MQTT协议-订阅主题和订阅确认

SUBSCRIBE——订阅主题

订阅是客户端向服务端订阅

在这里插入图片描述

订阅报文

订阅报文与CONNECT报文类似,都是由固定报头+可变报头+有效载荷组成

固定报头比较简单,也是由两个字节组成,第一个字节为82,第二个字节是剩余长度

在这里插入图片描述

可变报头由两个字节组成,也是基本固定,十六进制为00 0A

在这里插入图片描述

有效载荷由两部分组成,分别是主题过滤器和服务质量要求,主题过滤器可以简单理解为主题,对应的就是阿里云平台上的具有订阅权限的Topic,根据CONNECT报文组合可知,这个Topic也是要转换为十六进制的,服务质量要求可设置为00

在这里插入图片描述

将主题转化为十六进制后,计算出字节数量,放到开头,服务质量要求设置为00,放到最后

在这里插入图片描述

将固定报头、可变报头和有效载荷的十六进制数组合起来,就得到了订阅报文,剩余长度计算出来得0x36

在这里插入图片描述

组合订阅报文

在订阅之前,一定要先通过CONNECT报文连接上阿里云,再发送订阅报文,注意是客户端向服务器订阅

固定报头:82 ??

可变报头:00 0A

下面进行有效载荷的字节转换,在阿里云平台的产品中找到自定义Topic,选择带有订阅权限的Topic类,复制到文本文档

在这里插入图片描述

将${deviceName}改为具体的设备名

在这里插入图片描述

使用网络调试助手转为十六进制,先在ASCII模式下粘贴Topic类

在这里插入图片描述

点击发送设置的HEX,将Topic转为十六进制,复制到文本文档,点击发送,查看数据长度

在这里插入图片描述

长度为30,30转为十六进制为1E,在数据的开头加上长度,在最后加上服务质量等级Qos,设置为00

在这里插入图片描述

加上固定报头和可变报头,可得

在这里插入图片描述

计算??后面的字节数量,为35个,小于128,因此使用单字节表示剩余长度,转为十六进制为0x23,因此最终的订阅报文如下

在这里插入图片描述

使用网络调试助手订阅阿里云设备Topic

先用CONNECT报文连接上阿里云,阿里云服务器返回4个字节,最后一个字节为00,则表示连接成功

在这里插入图片描述

设备已经显示在线

在这里插入图片描述

再发送订阅报文,可看到阿里云回复了5个字节,则表示订阅成功

在这里插入图片描述

SUBACK——订阅确认

服务端发送SUBACK报文给客户端,用于确认它已收到并且正在处理SUBSCRIBE报文。

SUBACK报文包含一个返回码清单,它们指定了SUBSCRIBE请求的每个订阅被授予的最大QoS等级。

上一步中阿里云回复了90 03 00 0A 01共5个字节,这就是订阅确认报文

订阅确认报文解析

订阅确认报文也是由固定报头+可变报头+有效载荷三部分组成

固定报头由两个字节表示,基本固定,第一个字节为90,第二个字节为剩余长度,用??先代替

在这里插入图片描述

可变报头由两个字节组成,与上面订阅主题报文的可变报头保持一致,为00 0A,也就是这一部分客户端发送什么给服务器,服务器就回复同样的数据,如果订阅报文的可变报头为00 0B,那这里订阅确认的可变报头也为00 0B

在这里插入图片描述

有效载荷包含一个返回码清单,实际就是服务质量等级Qos,但这里有个问题,在订阅报文里设置的等级是0,通过上面阿里云回复的应答可看到是01,等级为1,如果订阅报文设置等级为1,则服务器返回的也是01,这里是个小问题,也不清楚

在这里插入图片描述

将固定报头、可变报头和有效载荷组合起来,就变成了订阅确认报文,因为剩余长度后面就3个字节,所以表示长度的字节为03

最终订阅报文为:90 03 00 0A 01

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

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

相关文章

像素密度提升33%,Quest Pro动态注视点渲染原理详解

在Connect 2022上,Meta发布了Quest Pro,并首次在VR中引入动态注视点渲染(ETFR)功能,这是一种新型图形优化技术,特点是以用户注视点为中心,动态调节VR屏幕的清晰度(注视点中心最清晰、…

Oracle VM VirtualBox6.1.36导入ova虚拟机文件报错,代码: E_INVALIDARG (0x80070057)

问题 运维人员去客户现场部署应用服务,客户是windows server 服务器(客户不想买新机器),我们程序是在linux系统里运行(其实windows也可以,主要是为了保持各地环境一致方便更新和排查问题)我们使…

吐血整理学习方法,2年多功能测试成功进阶自动化测试,月薪23k+......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试进阶方向 测试进…

[Gin]框架底层实现理解(三)

1.engine.Run(port string) 这个就是gin框架的启动语句,看看就好了,下面我们解析一下那个engine.Handler() listenandserve 用于启动http包进行监听,获取链接conn // ListenAndServe listens on the TCP network address addr and then ca…

【SOP 】配电网故障重构方法研究【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Java中wait和sleep区别

文章目录1. Java中wait和sleep区别2. wait和sleep所属方法的不同3. wait的Demo3.1 没有synchronized同步代码块异常3.2 wait使用Demo4. sleep的Demo1. Java中wait和sleep区别 sleep属于Thread类中的static方法;wait属于Object类的方法sleep时线程状态进入TIMED_WAI…

java 如何实现在线日志

如何采集springboot日志至web页面查看 实现方案 基于Filter方式,在日志输出至控制台前,LoggerFitler 拦截日志通过websocket推送至前台页面 实现逻辑: LoggerFilter采集日志添加至LoggerQueue队列, LoggerConsumer 从LoggerQueue中采集推送至前台页面 #mermaid-s…

LearnOpenGL-光照-3.材质

本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject 文章目录材质例子1代码相关光照太强了例子2例子3: 不同的光源颜色材质 引出材质 如果我们想要在OpenGL中模拟…

TTS | 语音合成常见数据集及数据格式详情

linkLJSpeech网址 : The LJ Speech Dataset (keithito.com)数据集描述:数据集大小:2.6GB这是一个公共领域的语音数据集,由 13,100 个简短的音频剪辑组成 一位演讲者阅读 7 本非小说类书籍的段落。为每个剪辑提供转录。…

删除的文件怎么恢复?恢复方法在这里(支持Win和Mac)

案例:文件永久删除还能找回来吗?关于Win和Mac系统的恢复方法 “前几天我在清理电脑垃圾,不小心误删了重要的文件。有没有什么比较全面的方法,可以帮助我恢复删除的文件啊?在线急等回复!” 随着电脑使用的…

Golang 中 Slice的分析与使用(含源码)

文章目录1、slice结构体2、slice初始化3、append操作4、slice截取5、slice深拷贝6、值传递还是引用传递参考文献众所周知,在golang中,slice(切片)是我们最常使用到的一种数据结构,是一种可变长度的数组,本篇…

三维人脸实践:基于Face3D的渲染、生成与重构 <二>

face3d: Python tools for processing 3D face git code: https://github.com/yfeng95/face3d paper list: PaperWithCode 3DMM方法,基于平均人脸模型,可广泛用于基于关键点的人脸生成、位姿检测以及渲染等,能够快速实现人脸建模与渲染。推…

MySQL基础篇3

第一章 多表关系实战 1.1 实战1:省和市 方案1:多张表,一对多 方案2:一张表,自关联一对多 id1 name‘北京’ p_id null; id2 name‘昌平’ p_id1 id3 name‘大兴’ p_id1 id3 name‘上海’ p_idnull id4 name‘浦东’…

中国人工智能企业中集飞瞳全球港航人工智能领军者,箱况残缺检测视频流动态感知智能闸口,自动化港口码头数字化智慧港航中国人工智能企业

中国人工智能企业中集飞瞳全球港航人工智能领军者,箱况残缺检测视频流动态感知超级智能闸口,自动化港口码头数字化智慧港航。CIMCAI已完成全球250万人工智能集装箱箱况检验,完成全球上亿集装箱信息,先进产品在全球各港区及集装箱枢…

CNStack 多集群服务:基于 OCM 打造完善的集群管理能力

作者:学靖 概述 随着 Kubernetes 在企业业务中的应用和发展,单集群内的管理能力已经趋于完善,越来越多的客户期望在多云、多集群场景部署其业务,因此需要提供相应的多云、多集群管理能力。 CNStack 多集群服务是 CNStack 面向多…

【实现“大图”功能 Objective-C语言】

一、这时候,我们来实现另外一个功能,就是点击,实现这个“大图”, 1.点击“大图”按钮,实现这个“大图”, 那么我先给大家说一下,这个点击“按钮”,实现“大图”,这个思路是怎样的,大家看一下,这个示例程序,当你点击“大图”的时候,首先,这个图片变大,同时,后…

Nvidia jetson nano 部署yolov5_技术文档

Nvidia jetson nano 部署yolov5_技术文档 每天一句小姜格言:我行,我不是一般人儿 部署开始: 1、通过FileZilla,将window文件传输至jetson nano 上的nano文件夹下。 2、查看cuda 我买的jetson nano是带有配置好的镜像。系统配置…

[数据结构]:16-归并排序(顺序表指针实现形式)(C语言实现)

目录 前言 已完成内容 归并排序实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SortFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要是…

嵌入式开发:CIA保护跨连接设备的嵌入式数据

在嵌入式开发中,ITTIA SDL保护数据并确保嵌入式系统的开发安全。嵌入式系统中的数据管理安全威胁是什么?ITTIA如何解决这个问题?嵌入式系统和企业系统的数据管理理想情况下遵循相同的安全威胁。有三个主要的基本原则或目标被称为CIA:保密性&#xff1a…

【FATE联邦学习】standalone版Fateboard修改配置

背景&做法 很多其他程序(比如vscode的code server)也会使用这个 127 0 0 1:8080 socket进行通信,这样就没办法远程用vscode去开发了,所以需要修改下Fateboard的socket配置。官方文档中也给出了如何修改配置 The default data…