热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【MQTT协议学习】二、PUBLISH报文构建

PUBLISH-发布消息固定报头固定报头包含了报文类型,重发标志DUP,服务质量QoS,保留标志RETAIN这儿我们不重发࿰
PUBLISH-发布消息

固定报头

固定报头包含了报文类型,重发标志DUP,服务质量QoS,保留标志RETAIN
在这里插入图片描述
这儿我们不重发,服务质量为00(QoS0),无需服务器保留
则报文为:

30 XX

其中XX为我们后面报文的长度

可变报头

PUBLISH的可变报头包含了主题名和报文标识符,

描述
byte1长度 MSB
byte2长度LSB
byte3…n个主题字节
byte…报文标识符

其中长度为主题字节+报文标识符的长度。

对于QoS0的报文来说,只有主题名,没有报文标识符。

假设我们发布的主题为

testpublish

则对应的报文为00 0B为主题长度:

[00 0b]74 65 73 74 70 75 62 6C 69 73 68

有效载荷

对于PUBLISH报文,有效载荷不需要长度,直接跟有效载荷即可。
有效载荷的长度即剩余长度-可变报文长度
如我们要发布

"Hello World!"

报文。
则有效载荷为:

22 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 22

则我们最终构建的PUBLISH报文为

30 XX [00 0b]74 65 73 74 70 75 62 6C 69 73 68 [22 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 22]

XX的长度是27,对应的HEX值是1B
所以最终的发布报文时:

30 1B 00 0b 74 65 73 74 70 75 62 6C 69 73 68 22 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 22

发布报文测试

测试使用串口透传+EMQ X服务器

我们在EMQ X服务器上,新建一个账号,用来订阅该主题,看我们是否能够使用我们构建的报文成功发布消息。

我们使用透传工具,登录我们之前创建的0000000000用户,使用MQTT.FX登录另外一个账号,并订阅testpublish主题。
可以看到,当我们使用串口透传PUBLISH数据包后,MQTT.FX的另外一个用户正常收到了我们发布的报文信息。

在这里插入图片描述
至此,我们根据MQTT协议,完成了PUBLISH报文的构建。
下一步我们需要使用Subscribe报文进行主题的订阅。


推荐阅读
author-avatar
l佳恒_756
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有