Linux C应用编程:MQTT物联网

1 MQTT通信协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传 输)是一种基于客户端-服务端架构的消息传输协议,如今,MQTT 成为了最受欢迎的物联网协议,已广泛应用于车联网、智能家居、即时聊天应用和工业互 联网等领域。

1.1 MQTT 报文组成部分

固定头(Fixed header)、可变头(Variable header)以及有效载荷(Payload,消息体)。

  • 固定头(Fixed header):存在于所有 MQTT 报文中,固定头中有报文类型标识,可用于识别是哪 种 MQTT 报文,譬如该报文是 CONNECT 报文还是 CONNACK 报文,亦或是其它类型报文。
  • 可变头(Variable header):存在于部分类型的 MQTT 报文中,报文的类型决定了可变头是否存 在及其具体的内容。
  • 消息体(Payload):存在于部分类型的 MQTT 报文中,payload 就是消息载体的意思。

关于 MQTT 协议的参考资料,链接地址如下:MQTT 协议参考资料

1.2 MQTT 客户端连接服务端步骤

  1. 首先客户端需要向服务端发送连接请求,这个连接请求实际上就是向服务端发送一个 CONNECT 报文,也就是发送了一个 CONNECT 数据包。
  2. MQTT 服务端收到连接请求后,会向客户端发送连接确认。连接确认实际上是向客户端发送一个 CONNACK 报文,也就是 CONNACK 数据包。

1.3 MQTT 客户端与服务端断开连接

如果客户端想要断开与服务端的连接,此时客户端可以主动向服务端发送一个 DISCONNECT 报文来断开与服务端的连接

1.4 发布消息、订阅主题与取消订阅主题

1.4.1 PUBLISH--发布消息

当客户端连接到服务端之后,就可以向服务端发布消息了,每条发布的消息必须指定一个"主题",表示向某主题发布消息;MQTT 服务端可以通过主题来确定将消息转发给哪些客户端(订阅了该主题的客户端)

1.4.2 SUBSCRIBE--订阅主题

当客户端连接到服务端后,除了可以发布消息,也可以接收消息,客户端要想接收消息,首先要订阅该消息的主题。这样,当有客户端向该主题发布消息后, 订阅了该主题的客户端就能接收到消息了。

当客户端向服务端发送 SUBSCRIBE 报文,服务端接收到 SUBSCRIBE 报文之后会向客户端回复一个 SUBACK 报文(订阅确认报文),SUBACK 报文包含有"订阅返回码"和"报文标识符"这两个信息。

由上表可知,当 returnCode=0、1 或 2 这三种情况时,都表示订阅成功;具体返回的数字是多少,根据 订阅主题时 QoS 的不同,服务端的返回码也会有所不同!

1.4.3 UNSUBSCRIBE--取消订阅主题

客户端通过向服务端发送一个 UNSUBSCRIBE 报文来取消订阅主题,当服务端接收到 UNSUBSCRIBE 报文后,会向发送方回复一个 UNSUBACK 报文(取消订阅确认报文),客户端接收到 UNSUBACK 报文后就可以确认取消主题订阅已经成功完成了。

相关推荐
t***D26411 小时前
C在物联网协议中的实现
物联网
MCM-RL11111119 小时前
自由落体颅脑损伤打击器 自由落体打击器 脑损伤打击器 自由颅脑损伤落体操作臂
嵌入式硬件·物联网·测试工具·安全·信号处理
TDengine (老段)21 小时前
强杀服务、重启系统及断电对 TDengine 影响
运维·服务器·数据库·物联网·时序数据库·tdengine·涛思数据
TDengine (老段)1 天前
TDengine 字符串函数 TO_BASE64 用户手册
android·大数据·服务器·物联网·时序数据库·tdengine·涛思数据
TDengine (老段)1 天前
什么是 TDengine IDMP?
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
ElfBoard1 天前
ElfBoard技术贴|如何在【RK3588】ELF 2开发板上进行UART引脚复用配置
人工智能·单片机·嵌入式硬件·物联网
TDengine (老段)2 天前
TDengine 字符串函数 LTRIM 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Hubianji_092 天前
2026年第二届IEEE亚欧网络安全、物联网与软计算会议 (CITSC 2026)
物联网·安全·信息安全·国际会议·国际期刊·会议论文
小马_6662 天前
[好记性不如烂笔头]RT_Thread http ota升级踩坑笔记(CRC校验不通过)
笔记·物联网·网络协议·http
TDengine (老段)2 天前
优化 TDengine IDMP 面板编辑的几种方法
人工智能·物联网·ai·时序数据库·tdengine·涛思数据