博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
调用mosquitto发布消息
阅读量:2444 次
发布时间:2019-05-10

本文共 2170 字,大约阅读时间需要 7 分钟。

MQTT 是一个轻型协议,使用基于 TCP/IP 协议的发布/订阅消息转发模式,专门用于机器对机器 (M2M) 通信。 MQTT 协议的中心是 MQTT 服务器或代理 (broker) ,支持发布程序和订阅程序进行访问,如下图所示:

mosquitto 是一个开源的 MQTT broker 。
在这里插入图片描述

准备工作

sudo apt-get install mosquitto  #安装后才能运行MQTT brokersudo apt-get install libmosquitto-dev  #安装开发包才能在程序中调用sudo apt-get install libmosquittopp-dev #C++版封装的libmosquitto

运行Broker

mosquitto -v #使用默认参数开启MQTT broker

开个窗口订阅消息mosquitto_sub -t test -v

在代码中publish topic

有两种方式,一种可以调用libmosquitto来实现(C语言接口),另一种可以采用 libmosquittopp来实现(C++接口)。

c style

#include 
#include
#include
#include
#define HOST "localhost"#define PORT 1883#define KEEP_ALIVE 60#define MSG_MAX_SIZE 512bool session = true;int main(){ char buff[MSG_MAX_SIZE]; struct mosquitto *mosq = NULL; //libmosquitto 库初始化 mosquitto_lib_init(); //创建mosquitto客户端 mosq = mosquitto_new(NULL,session,NULL); if(!mosq){ printf("create client failed..\n"); mosquitto_lib_cleanup(); return 1; } //连接服务器 if(mosquitto_connect(mosq, HOST, PORT, KEEP_ALIVE)){ fprintf(stderr, "Unable to connect.\n"); return 1; } //开启一个线程,在线程里不停的调用 mosquitto_loop() 来处理网络信息 int loop = mosquitto_loop_start(mosq); if(loop != MOSQ_ERR_SUCCESS) { printf("mosquitto loop error\n"); return 1; } while(fgets(buff, MSG_MAX_SIZE, stdin) != NULL) { /*发布消息*/ mosquitto_publish(mosq,NULL,"test",strlen(buff)+1,buff,0,0); memset(buff,0,sizeof(buff)); } mosquitto_destroy(mosq); mosquitto_lib_cleanup(); return 0;}

c++ style

#include 
#include
#include
#include
#include
#include "mosquitto.h"#include "mosquittopp.h" #pragma comment(lib, "mosquittopp.lib")class mqtt_test:public mosqpp::mosquittopp { public: mqtt_test(const char *id):mosquittopp(id){} void on_connect(int rc) {std::cout<<"on_connect"<
topic,&res); if(res) { std::string strRcv=(char *)message->payload; std::cout<<"来自<"<
topic<<">的消息:"<
<

编译运行以上代码在sub窗口中会看到发过了的消息,若想在代码中sub一个topic,方法类似,主要就是处理on_messageon_subscribe回调函数。

Reference:

转载地址:http://bbtqb.baihongyu.com/

你可能感兴趣的文章
libc.a 文件恢复(转)
查看>>
SCO UNIX上cpio命令详细用法(转)
查看>>
思考-两个大表的关联.txt
查看>>
sql plan baseline(二)
查看>>
第十章 sqlplus的安全性
查看>>
第十三章 sqlplus命令(一)
查看>>
第三章(backup and recovery 笔记)
查看>>
第一章(backup and recovery 笔记)
查看>>
第六章(backup and recovery 笔记)
查看>>
[script]P_CHECK_BLACK.sql 检查当前用户下是否有varchar2字段的末尾包含空格
查看>>
实验-数据分布对执行计划的影响.txt
查看>>
实验-闪回数据库
查看>>
实验-闪回表
查看>>
oracle审计
查看>>
typeof运算符_JavaScript typeof运算子
查看>>
react 前端拆分_React中的代码拆分
查看>>
叶节点到根节点的路径_节点路径模块
查看>>
如何查找公共子字符串长度_如何在C中查找字符串的长度
查看>>
字符串tostring_字符串toString()方法
查看>>
number.isnan_Number isNaN()方法
查看>>