MQTT协议之PUBLISH发布QoS0、QoS1消息报文分析

一、PUBLISH发布QoS0消息

二、抓包消息

 

 

1.1 固定报头

30 10
其中:
30 – 对应的控制报文类型为PUBLISH,重发标志DUP位0,QoS等级为0,
RETAIN标志位0
10 – 剩余长度0x10 = 16个字节

1.2 可变报头

00 06 74 6f 70 69 63 31
其中:
00 06 – 这里就是Topic Name的长度,共6个字节
74 6f 70 69 63 31 – topic1

1.3 有效载荷

31 32 33 33 33 32 34 35
其中,这里没有载荷的长度。
--对应的ASCII码:12333245

2.发布QoS消息的响应报文示例

MQTT协议中规定,PUBLISH报文的接收者必须按照根据PUBLISH报文中的QoS等级发送响应,下表描述了预期的响应规定

服务质量等级 预期响应
QoS0 无响应
QoS1  PUBACK报文
QoS2 PUBACK报文


注意:对于QoS 0类型的消息响应,协议规定可以无响应,但是并不是强制的,一般服务器接收到QoS 0类型的消息,都会按照原样返回,这对于Client其实是不影响的,因为客户端发送的Topic,一般都不会自己订阅,所以接收到没有订阅的Topic消息,不动作即可。
这里我的是没有应答。 

三、PUBLISH发布QoS1消息

 四、抓包消息

1.1 固定报头

32 12
其中:
32 – 对应的控制报文类型为PUBLISH,重发标志DUP位0,QoS等级为1,
RETAIN标志位0
12 – 剩余长度0x12 = 18个字节

1.2 可变报头

00 06 74 6f 70 69 63 31
其中:
00 06 – 这里就是Topic Name的长度,共6个字节
74 6f 70 69 63 31 – topic1

1.3 消息ID

00 09 -就是发送消息的序号,每发一次加一

1.4 有效载荷

31 32 33 33 33 32 34 35
其中,这里没有载荷的长度。
--对应的ASCII码:12333245

五、服务器应答抓包消息

1.1 固定报头

 40 02:应答报头和剩余长度

1.2 消息ID

00 09 -就是应答发送消息的序号

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32F103是一款具有ARM Cortex-M3内核的单片机,而W5500是一款基于SPI接口的以太网控制芯片。要实现STM32F103接收MQTT QoS1消息需要进行以下步骤: 1. 硬件连接:将W5500通过SPI接口连接到STM32F103的相应引脚,并给W5500提供适当的电源和时钟。 2. 初始化W5500:在STM32F103上初始化W5500控制器,设置其工作模式和网络连接参数,包括IP地址、端口号、MAC地址等。 3. 建立MQTT连接:使用W5500进行网络连接,建立到MQTT服务器的连接。发送MQTT连接请求,包括客户端ID、用户名、密码等信息。等待MQTT服务器的回应,确保连接建立成功。 4. 订阅主题:发送MQTT订阅主题请求,将感兴趣的主题名称发送给服务器。等待服务器的确认,表明订阅成功。 5. 接收消息:在循环使用W5500接收MQTT消息,通过订阅主题和正确配置接收回调函数,确保只接收到QoS1消息。 6. 消息确认:收到消息后,发送MQTT PUBACK消息确认收到。这将使服务器知道消息成功到达设备,并且可以继续发送更多的消息。 以上就是实现STM32F103接收MQTT QoS1消息的一般步骤。具体实现时,需要根据具体的硬件和软件平台进行相应的编程和配置。 ### 回答2: STM32F103和W5500是很常见的嵌入式系统使用的芯片,用于实现网络通信功能。MQTT是一种轻量级的消息传输协议,常用于物联网设备之间的通信。QoS1(Quality of Service 1)是MQTT的一种服务质量等级,表示消息至少被传送一次。 要实现STM32F103通过W5500接收MQTT QoS1消息需要以下步骤: 1. 初始化W5500芯片,包括设置网络参数、初始化SPI通信等。确保STM32F103能够正常与W5500进行通信。 2. 连接到MQTT服务器。使用W5500建立到MQTT服务器的TCP连接,并发送MQTT CONNECT报文进行认证和连接。 3. 订阅消息。发送MQTT SUBSCRIBE报文来订阅QoS1消息。 4. 接收消息。使用W5500来接收服务器传来的MQTT PUBLISH报文,并解析消息内容。 5. 确认接收。对接收到的消息进行确认,发送MQTT PUBACK报文,表示成功接收到消息。 6. 处理下一条消息。继续接收和处理后续的QoS1消息,直至所有消息处理完成。 需要注意的是,为了能够正确接收MQTT QoS1消息需要实现消息持久化、重发机制等。当接收到消息后,需要将其存储在合适的地方,以防止消息丢失。同时,需要定时发送MQTT PUBACK报文来确认接收,以便服务器知道该消息已被成功接收。 以上是基本的实现流程,具体细节可能因使用的MQTT库和具体业务需求而有所区别。具体开发时,可以根据实际情况对这些步骤进行适当调整和优化。 ### 回答3: 要实现STM32F103与W5500接收MQTT QoS 1消息,首先需要确保已经配置好STM32F103的硬件和W5500的网络连接,并安装好相应的驱动库。 以下是大致的步骤: 1. 初始化W5500模块,包括设置IP地址、端口号、连接模式等参数。 2. 创建一个MQTT客户端,设置相关的MQTT连接参数,包括服务器地址、端口号、客户端ID等。 3. 连接到MQTT服务器。 4. 订阅MQTT主题,以便接收相应的QoS 1消息。可以使用MQTT的订阅回调函数,在接收到消息时触发相应的操作。 5. 循环接收消息,通过W5500模块接收MQTT服务器发送的QoS 1消息。 6. 在接收到消息时,可以根据需要进行相应的处理,例如解析消息内容、进行业务逻辑处理等。 需要注意的是,STM32F103的能力有限,如果要处理大量的QoS 1消息,可能需要进行一些优化措施,例如使用DMA进行数据传输,或者调整MQTT消息的传输速率等。 同时,还需要关注STM32F103和W5500的资源占用情况,确保系统正常运行。在实际开发,可以根据具体需求进行相应的调试和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值