MQTT通讯协议分析(三): 发布Publish
一. 测试环境
mosquitto(MQTT服务器,虚拟机VM ubuntu16.04) + Paho(MQTT客户端,windows10) + ESP8266(MQTT客户端)
ESP8266客户端上电启动将连接mosquitto服务器, 并订阅“test/a”, 并开启按键任务扫描按键是否按下,按下则发布Publish消息,TopicName为"windows/test/a" ,esp8266_message %d( count)", 其中count随着按键下不断累加。 具体函数参看如下:
mqtt客户端主程序:
按键扫描任务:
OK, 再看下windows中Paho mqtt客户端配置,如下图:
二. 分析Pulish数据包
1. 点击“发布”,利用wireshark抓取数据包
分析:
Publish 固定报头
31 :bit0: Retain = 1, 与我们设置的"已保留"一致
15 : 剩余长度, len = 1*16 + 5 = 21
Publish 可变报头
00 :Topic name 长度MSB
06 :Topic name 长度LSB ,因此 len = 6,与我们设置的"test/a" 长度吻合
74 65 73 74 2f 61 : 对应的就是Topic name -> "test/a"
68 65 6c 6c 6f 5f 65 73 70 38 32 36 36 : 对应的就是消息内容 -> "hello_esp8266"
三. 实验结果
通过串口助手打印esp8266相关信息
可以看到esp8266一上电成功连接mqtt服务器后,马上收到了 "hello_esp8266"消息, 这就是Retain 字段的作用
接下来,我们通过按下按键, 查看windows下 paho mqtt客户端是否接收到esp8266发布Publish的消息,结果如下:
OK, windows中的paho客户端成功接收到了 esp8266客户端发布Publish消息