【W5500W】socket recv :
34 37 00 33
2F 64 6F 77 6E 2F 66 63 37 65 32 37 31 33 33 32 66 37 66 36 65 36 38 34 64 35 63 32 36 34 39 65 36 31 39 62 61 62
2F 44 43 32 43 32 36 30 30 32 31 45 43
00 01
30 50 00 33
2F 64 6F 77 6E 2F 66 63 37 65 32 37 31 33 33 32 66 37 66 36 65 36 38 34 64 35 63 32 36 34 39 65 36 31 39 62 61 62
2F 44 43 32 43 32 36 30 30 32 31 45 43
00 02 00 01 00 00 80 C1 43 E9 F2 9C BA F4 BB 46 52 9D 80 24 92 BC 71 89 1C 38 AD
钩子函数解析:
[#][MQTT协议学习RX]Message arrived on topicName /down/fc7e271332f7f6e684d5c2649e619bab/DC2C260021EC 前面topicName长度data->topicName->lenstring.data=0X33
[#][MQTT协议学习RX]负载长度data->message->payloadlen=0X00
[#][MQTT协议学习RX]负载内容payload: : []
[#][MQTT协议学习RX]Message arrived on topicName /down/fc7e271332f7f6e684d5c2649e619bab/DC2C260021EC 前面topicName长度data->topicName->lenstring.data=0X33
[#][MQTT协议学习RX]负载长度data->message->payloadlen=0X1B
[#][MQTT协议学习RX]负载内容payload: : [00 02 00 01 00 00 80 C1 43 E9 F2 9C BA F4 BB 46 52 9D 80 24 92 BC 71 89 1C 38 AD ]
解析
msgType = p.payload[0];
sqeId = p.payload[1]|(p.payload[2]<<8);
serType = p.payload[3]|(p.payload[4]<<8);
cmd = p.payload[5]|(p.payload[6]<<8);
所以
[#]msg type = 0 , seq id = 2 , server type = 1 , cmd = 8000
个人再次分析
首先MQTT状态机任务必须20MS一次的跑才能解析处理-因为您能看到上面W5500收到的报文是2个报文混在一起的
然后你看报文2是很明白的30 50 00 33 意思的0X30标识publish 0X50标识报文长度
这是2个固定头 然后00 33是可变头标识0X0033就是topicname长度
已减去就得到了body
继续分析报文1为什么是空的呢?
它固定头是0X34所以最后的00 01不是body!它0X34和0X30不同 它00 01是隶属于可变头的 body为空!