雨打梨花深闭门
忘了青春
误了青春
物联网老师上课的时候突然让用MQTT写一个通信程序,实现命令控制,他说的是客户端输入ls
,那边就得返回目录信息,不是很懂,查了一大堆也不会,今天有点时间把第一步走了。
MQTT程序安装
千里之行,始于足下
这东西安装也是费了大劲,百度一查全是介绍协议的,CSDN博客上也是互相抄的飞起,没一个是真正能用的,要么抄别人没抄完,要么抄的就是错的。
理一下我们的需求:使用MQTT通信,实现部分远程控制命令,基于C/C++编程语言实现。
然后再看看MQTT到底是个什么?
简单来说就是个消息代理,双方制定同一个订阅ID,假设是“2333”,那么发布端负责使用“2333”发布消息,订阅端则使用“2333”接收消息。
所以我们需要安装两个东西:
- MQTT代理服务器(mosquitto)
- MQTT的C/C++接口库(paho.mqtt.c)
接下来的安装步骤均基于Ubuntu 16.04的环境下进行。
mosquitto安装
我又要吐槽了,人家官网都说了,Ubuntu可以apt安装,我就不明白为什么网上一搜全是源码安装的,无脑抄真是难搞。。。mosquitto官网下载
直接执行命令:
sudo apt install mosquitto
会自动安装对应的依赖库的,简单吧!!!
可以用一个小例子检测下是否安装成功:
依次开三个终端执行以下命令:
终端1,作为代理服务器:
mosquitto -p 1883 # mosquitto默认时候用1883端口
终端2,作为订阅端:
mosquitto_sub -t mqtt
终端3:,作为发布端:
mosquitto_pub -h localhost -t mqtt -m "23333"
然后,就能在终端2收到消息了:
paho.mqtt.c安装
这个得从github上下载源码安装,其实安装教程在README中已经写了,基本执行以下命令就行了:
安装依赖:
sudo apt-get install build-essential gcc make cmake cmake-gui cmake-curses-gui
安装paho.mqtt.c:
# clone
git clone git@github.com:eclipse/paho.mqtt.c.git # ssh
git clone https://github.com/eclipse/paho.mqtt.c.git # https
# run
cd paho.mqtt.c
make
sudo make install
然后就安装好了,需要注意的是,头文件默认在/usr/local/include
下,动态/静态库默认在/usr/local/lib
下,也就是说你如果要用到这个库的话,得想好怎么去引用,可以使用cmake或者你再移动到/usr/include
和/usr/lib
下,当然只是完成作业的话还有一种非常简单粗暴的方法,就是把文件拷贝到当前目录下哈哈哈。
C/C++中使用MQTT
很简单,调接口就行了。
举个小例子。
发布端 publish.cpp:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "MQTTClient.h"
int main(int argc, char **argv) {
char *<