MQTT协议-发布消息(服务器向客户端发送)
发布消息报文组成:https://blog.csdn.net/weixin_46251230/article/details/129414158
在了解了发布信息的PUBLISH报文后,就可以分析出阿里云服务器向本地客户端发送的报文数据了
实验前需要在阿里云创建产品和设备,并创建简单的温度和湿度物模型:https://blog.csdn.net/weixin_46251230/article/details/128996719
1、用CONNECT报文连接阿里云
查看设备是否显示在线
2、订阅物模型主题
选择带有订阅权限的Topic类
将${deviceName}用自己的设备名称代替后,转为十六进制,计算出字节长度,在字节最后需要加上服务质量等级Qos,这里设置为00,不能忘记
加上固定报头和可变报头,组合成订阅主题报文
发送报文,收到阿里云应答,表示订阅成功
3、阿里云物模型发送数据
阿里云平台里选择在线调试,然后设置温度和湿度值,最后点击设置,服务器便下发数据到客户端
在网络调试助手可以看到阿里云发送的报文,将报文复制到文本文档进行分析
4、分析报文
报文的首字节是30,符合发布消息报文的固定报头字节,后面一个字节是AB,最高位为1,因此还有一个字节01来表示剩余长度,低位在前,高位在后,可以计算出长度为171,所以可以得到固定报头为30 AB 01
可变报头的首两个字节表示报头的长度,所以00 34是表示长度的,0x34转为十进制为52,因此就从34后开始数52个字节作为可变报头
将这52个字节转为ASCII可得到阿里云物模型订阅权限的Topic类:/sys/i6deo513xT1/Device01/thing/service/property/set
与上面发送的订阅主题报文的一致,说明分析正确
剩下的字节就全部是有效载荷,该部分首两个字节不是代表长度的,是真实数据,将其全部转为ASCII码便可得到JSON格式的数据,可看到温度值为20,湿度值为66,与一开始在阿里云平台上设置的一样,说明服务器向客户端发送的数据正确。