热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

PUBLISH-发布消息固定报头固定报头包含了报文类型,重发标志DUP,服务质量QoS,保留标志RETAIN这儿我们不重发࿰
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报文进行主题的订阅。


推荐阅读
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
  • 本文探讨了在Qt框架下实现TCP多线程服务器端的方法,解决了一个常见的问题:服务器端仅能与最后一个连接的客户端通信。通过继承QThread类并利用socketDescriptor标识符,实现了多个客户端与服务器端的同时通信。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 本文详细解析了Java中流的概念,特别是OutputStream和InputStream的区别,并通过实际案例介绍了如何实现Java对象的序列化。文章不仅解释了流的基本概念,还探讨了序列化的重要性和具体实现步骤。 ... [详细]
  • 本文介绍了如何使用C# Winform开发局域网内的文件传输功能,详细描述了从用户界面到后端网络通信的具体实现。 ... [详细]
  • 本文详细介绍了如何使用 Python 编程语言中的 Scapy 库执行 DNS 欺骗攻击,包括必要的软件安装、攻击流程及代码示例。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 可参照github代码:https:github.comrabbitmqrabbitmq-tutorialsblobmasterjavaEmitLogTopic.ja ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • 网宿科技正式宣布全面兼容最新QUIC (HTTP/3)协议标准
    网宿科技正式宣布全面兼容最新QUIC (HTTP/3)协议标准 ... [详细]
author-avatar
l佳恒_756
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有