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

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报文进行主题的订阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值