北邮嵌入式实验_MQTT协议实验过程及代码说明
### 北邮嵌入式实验_MQTT协议实验过程及代码说明 #### 一、实验环境搭建 在开始实验之前,需要确保实验环境已经搭建完成。本次实验使用的是虚拟机Vmware12.5.7,并且安装了Ubuntu 17.10作为操作系统。为了实现MQTT协议的功能,还需要安装Broker服务,这里选择了mosquitto 1.4.12版本。 ##### 软件支撑 - **虚拟机**: Vmware 12.5.7 - **Linux版本**: Ubuntu 17.10 - **Broker**: mosquitto 1.4.12 (Linux version) ##### Linux下mosquitto安装方法 在Ubuntu中安装mosquitto可以通过以下命令来实现: 1. 打开终端。 2. 使用命令`sudo apt install snapd`来安装snap工具(如果尚未安装的话)。 3. 使用命令`snap install mosquitto`来通过snap安装mosquitto。 4. 或者直接使用命令`sudo apt install mosquitto`来通过apt安装mosquitto。 安装完成后,可以使用`mosquitto -v`命令来检查安装是否成功,并查看版本信息。 #### 二、通信过程介绍 MQTT协议是一种轻量级的消息发布/订阅模式的网络传输协议,它支持一对多的消息分发和应用之间的解耦。在本次实验中,我们通过以下步骤来实现MQTT的通信过程: 1. **启动Broker服务**:首先需要启动mosquitto服务。在终端中输入`mosquitto -v`,这将启动Broker并显示版本信息。 2. **运行订阅端**:在另一个终端窗口中,进入到`/paho.mqtt.c/build/output/samples`目录下,运行`./MQTTAsync_subscribe`来启动订阅端。 3. **运行发布端**:在第三个终端窗口中,同样进入到`/paho.mqtt.c/build/output/samples`目录下,运行`./MQTTClient_publish`来启动发布端。 4. **观察通信过程**:此时,发布端将向Broker发送消息,而订阅端将接收这些消息。通过观察终端输出的信息,可以看到消息是如何被订阅端接收到的。 #### 三、代码说明 本节将详细介绍实验中涉及的关键代码部分。 ##### 代码结构概述 实验所用的MQTT源码来自于GitHub上的`paho.mqtt.c-master`项目。此项目包含多个子文件夹,每个子文件夹都服务于特定的目的。其中,`src`文件夹是最核心的部分,包含了MQTT程序的主要实现代码。 - `src`文件夹包含了MQTT程序的主要实现代码。 - `Makefile`文件定义了如何编译源代码。 ##### 编译过程 在`src`文件夹所在目录中,执行`make`命令可以编译所有相关的源文件。编译完成后,会在当前目录下生成一个名为`build`的文件夹,其中包含了编译后的动态链接库和可执行程序。 - 动态链接库有四种类型:`paho-mqtt3a.so`(异步)、`paho-mqtt3as.so`(异步+加密)、`paho-mqtt3c.so`(同步)和`paho-mqtt3cs.so`(同步+加密)。 - 可执行程序也分为异步与同步两种模式,并进一步分为普通模式与加密模式。 ##### 同步订阅代码详解 接下来,我们将重点分析`MQTTClient_subscribe`函数,该函数实现了同步订阅功能。 ```c #include<stdio.h> #include<stdlib.h> #include<string.h> #include "MQTTClient.h" #define ADDRESS "tcp://localhost:1883" #define CLIENTID "ExampleClientSub" #define TOPIC "MQTTExamples" #define QOS 1 #define TIMEOUT 10000L volatile MQTTClient_deliveryToken deliveredtoken; void delivered(void* context, MQTTClient_deliveryToken dt) { printf("Message with token value %d delivery confirmed\n", dt); deliveredtoken = dt; } int msgarrvd(void* context, char* topicName, int topicLen, MQTTClient_message* message) { int i; //... } ``` 在此代码段中,首先引入了必要的头文件,并定义了一些常量。`delivered`函数用于处理消息确认,当消息被成功传递时,这个函数会被调用。`msgarrvd`函数则用于处理接收到的消息。 通过上述步骤和代码,我们可以成功地实现一个基于MQTT协议的简单发布/订阅系统,并深入了解其实现原理和技术细节。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 各种字符串相似度和距离算法的实现Levenshtein、Jaro-winkler、n-Gram、Q-Gram、Jaccard index、最长公共子序列编辑距离、余弦相似度…….zip
- 运用python生成的跳跃的爱心
- 包括用 Java 编写的程序 欢迎您在此做出贡献!.zip
- (源码)基于QT框架的学生管理系统.zip
- 功能齐全的 Java Socket.IO 客户端库,兼容 Socket.IO v1.0 及更高版本 .zip
- 功能性 javascript 研讨会 无需任何库(即无需下划线),只需 ES5 .zip
- 分享Java相关的东西 - Java安全漫谈笔记相关内容.zip
- 具有适合 Java 应用程序的顺序定义的 Cloud Native Buildpack.zip
- 网络建设运维资料库职业
- 关于 Java 的一切.zip