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客户端主程序:

MQTT通讯协议分析(三): 发布Publish

        按键扫描任务:

MQTT通讯协议分析(三): 发布Publish

OK, 再看下windows中Paho mqtt客户端配置,如下图:

MQTT通讯协议分析(三): 发布Publish

 

二. 分析Pulish数据包

      1. 点击“发布”,利用wireshark抓取数据包

MQTT通讯协议分析(三): 发布Publish

分析:

    Publish 固定报头

MQTT通讯协议分析(三): 发布Publish

      31  :bit0: Retain = 1, 与我们设置的"已保留"一致

      15  : 剩余长度, len = 1*16 + 5 = 21

      Publish 可变报头MQTT通讯协议分析(三): 发布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相关信息

MQTT通讯协议分析(三): 发布Publish

可以看到esp8266一上电成功连接mqtt服务器后,马上收到了 "hello_esp8266"消息, 这就是Retain 字段的作用

接下来,我们通过按下按键, 查看windows下 paho mqtt客户端是否接收到esp8266发布Publish的消息,结果如下:

MQTT通讯协议分析(三): 发布Publish

 OK, windows中的paho客户端成功接收到了 esp8266客户端发布Publish消息