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 报文后就可以确认取消主题订阅已经成功完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619868.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Res2Net网络

Res2Net网络 摘要Abstract1. Res2Net网络1.1 文献摘要1.2 背景1.3 创新点1.4 网络结构1.5 实验1.5.1 在ImageNet数据集上进行实验1.5.2 在CIFAR数据集上进行实验 2. Res2Net代码实现3. 总结 摘要 Res2Net是一种神经网络架构,旨在改善类似ResNet的网络在计算机视觉任…

智能生活新体验:小米香薰加湿器技术解码

在现代家居生活中,科技与舒适性日益交织,智能家居产品成为提升生活品质的重要工具。小米香薰加湿器作为一款集科技与生活美学于一体的产品,其独特的设计和多功能性受到了广泛欢迎。今天,我们就来详细拆解这款融合了科技与香薰元素…

配置linux的oracle 21c启停服务

一、配置启停 1、使用root用户登陆 su - root 2、修改oratab文件 修改oratab文件,将红框里面的N改为“Y”,使启停脚本能够生效 vi /etc/oratab 3、验证 配置好后就能够使用 dbshut 停止服务 和 dbstart 启动服务 了 2.1启动服务 su - oracle dbstart…

【最新整理】3ds Max 大佬都在用的10款爆火插件推荐!

在3D建模和渲染领域,熟悉使用各种插件已经成为了大佬们的标配,而3ds Max作为最受欢迎的三维建模软件之一,更是有着丰富的插件资源。今天,小编将为大家盘点一下最新整理的10款爆火插件,这些插件不仅能够提升你的工作效率…

01 static 代码块 继承 权限修饰符 多态 抽象类 接口 枚举

static、代码块、懒汉单例、继承、权限修饰符 static静态关键字 静态成员变量会在堆内存中存储数据(单独存储,并不会存储在new出来的对象中) static是什么,static修饰成员变量的用法 static是什么 static是静态的意思,可以用来修饰成员变量、成员方法…

电子印章管理软件

电子印章管理软件主要用于企业或机构对电子印章的生成、存储、使用、权限管理、审计追踪等全过程进行集中、安全、高效的管控。以下是一些值得推荐的电子印章管理软件: e-章宝(易友EU3000智能盖章软件) 特点:所见即得操作的快速在pdf文件上盖电子印章和电…

【攻防世界】ics-07

<?php session_start();if (!isset($_GET[page])) {show_source(__FILE__);die(); }if (isset($_GET[page]) && $_GET[page] ! index.php) {include(flag.php); }else {header(Location: ?pageflag.php); } <?phpif ($_SESSION[admin]) {$con $_POST[con];$…

(踩坑)Please refer to 异常和Error creating bean with name 异常

一、Please refer to 异常 如图所示&#xff0c;在使用maven构建项目的时候&#xff0c;如果提示该错误&#xff0c;则可能是xml配置文件有问题或者测试类等。但是没有明确的异常信息&#xff0c;所以做以下小改动&#xff0c;可以查看异常信息。 在IDEA工具中&#xff0c;打…

PTA 编程题(C语言)-- 特殊a串数列求和

题目标题&#xff1a; 判断素数 题目作者&#xff1a;颜晖 浙大城市学院 给定两个均不超过9的正整数a和n&#xff0c;要求编写程序求aaaaaa⋯aa⋯a&#xff08;n个a&#xff09;之和。 输入格式&#xff1a; 输入在一行中给…

CentOS7.9上安装Oracle11g详解

目录 一、环境准备1.安装依赖2.查看libaiobaio版本3.修改host&#xff0c;绑定主机名4.关闭selinux 二、安装配置1.创建组、用户2.修改内核参数3.配置Oracle用户参数4.修改/etc/pam.d/login 文件5.修改/etc/profile 文件6.创建数据库相关目录7.安装包上传、解压8.添加环境变量 …

【报错解决】RuntimeError: Distributed package doesn‘t have NCCL built in

报错信息&#xff1a; raise RuntimeError("Distributed package doesnt have NCCL " "built in") RuntimeError: Distributed package doesnt have NCCL built in报错原因&#xff1a; windows系统不支持nccl&#xff0c;采用gloo&#xff1b; 报错解决&…

linux文件访问权限理解

目录 一&#xff0c;涉及指令: 二&#xff0c;权限的表示 三&#xff0c;权限命令使用 一&#xff0c;涉及指令: umask chmod chown/chgrp 二&#xff0c;权限的表示 rwx rwx r-x含义: 访问方式: r-可读;w-可写&#xff1b;x-可执行&#xff1b; 访问用户:u-所有者;…