ubuntu18.04安装mosquitto及使用

2023-11-15

1、安装

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto
sudo apt-get install mosquitto-clients

2、测试

sudo service mosquitto status

3、常用命令

订阅主题

mosquitto_sub -h localhost -p 1883 -u root -P root -t topicname

推送消息

mosquitto_pub -h localhost -p 1883 -u root -P root -t topicname -m "发送的消息内容"

查看mosquitto的进程

ps -aux | grep mosquitto

 杀掉进程#

kill -9 18248

启动#

mosquitto -c /etc/mosquitto/mosquitto.conf -d

4、官方开发文档

mosquitto库函数https://mosquitto.org/api/files/mosquitto-h.html

说明文档https://mosquitto.org/man/

5、mosquitto开发示例

//添加的头文件
#include <mqtt_protocol.h>
#include <mosquitto.h>

#define client_ID "test"
#define username "admin"
#define passward "123456"
#define host "localhost"
#define port 1883
#define keepalive 60
static bool clean_session = false;
//初始化
int mosquitto_Init()
{
    int err = 0;
    //libmosquitto 库初始化
    err = mosquitto_lib_init();
    if (err < 0) {
        printf("mosquitto lib init fail...error code %d\r\n",err);
    }
    //创建mosquitto客户端
    struct mosquitto *mosq = mosquitto_new(client_ID, clean_session, NULL);
    if (mosq == NULL) {
        printf("\r\ncreate client failed...%d\r\n", errno);
        mosquitto_lib_cleanup();
        return 1;
    }
    //增加mqtt5.0支持
    mosquitto_int_option(mosq, MOSQ_OPT_PROTOCOL_VERSION, MQTT_PROTOCOL_V5);
    //设置回调函数
    mosquitto_connect_v5_callback_set(mosq, mqtt_connect_v5_callback);
    mosquitto_message_v5_callback_set(mosq, mqtt_message_v5_callback);
    mosquitto_subscribe_v5_callback_set(mosq, mqtt_subscribe_v5_callback);
    mosquitto_log_callback_set(mosq, mqtt_log_callback);
    //设置用户名和密码
    err = mosquitto_username_pw_set(mosq, username, passward);
    if(err != MOSQ_ERR_SUCCESS) {
        printf("username_pw set fail... err code %d\r\n", err);
    }
   //客户端连接服务器
    err = mosquitto_connect(mosq, host, port, keepalive);
    if (err < 0) {
        printf("connect fail\r\n");    
        return 1;
    }
    //主线成将被阻塞至此
    err = mosquitto_loop_forever(mosq, -1, 1);
    if (err < 0) {
        printf("mosquitto loop fail\r\n");
    }
    mosquitto_disconnect_v5(mosq, MQTT_RC_NORMAL_DISCONNECTION, NULL);
    mosquitto_loop_stop(mosq, true);
    mosquitto_destroy(mosq);
    mosquitto_lib_cleanup();

    return 0; 
}

//连接成功订阅函数回调
void mqtt_connect_v5_callback(struct mosquitto *mosq,
                            void *userdata,
                            int result,
                            int flag,
                            const mosquitto_property *props
                            )
{
    int i, rc;
    if(!result){
        /* Subscribe to broker information topics on successful connect. */
        rc = mosquitto_subscribe_v5(mosq, NULL, "test", 2, 0, NULL);
        if(rc!= MOSQ_ERR_SUCCESS) {
            printf("ERROR subscribe code:%d\r\n", rc);
        }
    }else{
        printf("Connect failed\r\n");
    }
}

//消息接收回调函数
void mqtt_message_v5_callback(struct mosquitto *mosq,
                            void *userdata,
                            const struct mosquitto_message *message,
                            const mosquitto_property *props
                            )
{
    if(message->payloadlen){
        //接收
        printf("topic: %s, length: %d, data: %s\r\n", message->topic, message->payloadlen, (char *)message->payload);
    }else{
        //printf("%s (null)\r\n", message->topic);
    }
}

//订阅成功回调函数
void mqtt_subscribe_v5_callback(struct mosquitto *mosq, 
                                void *userdata,
                                int mid,
                                int qos_count,
                                const int *granted_qos
                                )
{
    int i;
    printf("Subscribed (mid: %d): %d", mid, granted_qos[0]);
    for(i=1; i<qos_count; i++) {
        printf(", %d", granted_qos[i]);
    }
    printf("\r\n");
}

//日志回调函数
void mqtt_log_callback(struct mosquitto *mosq, void *userdata, int level, const char *str)
{
    // printf("log__   %s\r\n", str);
}
//发布函数
mosquitto_publish_v5(mosq, NULL, topic, len, payload, qos, retain, NULL);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu18.04安装mosquitto及使用 的相关文章

随机推荐

  • STM8单片机串口驱动的深度解析

    串口是单片机最重要的外设之一 在很多项目开发中都有应用 Lora模块的外部通讯方式就是串口 本节简单的和大家解析一下串口通讯及驱动代码的编程 STM8L101F3单片机支持一路串口通讯 我们先看一下Lora模块的硬件接口 如下图所示 串口的
  • go环境安装与idea goPATH设置

    1 找到中文go网站安装go环境 http docscn studygolang com doc tutorial getting started
  • Qt应用程序允许使用高地址内存的设置

    1 Qt4版本 在 pro文件中添加以下代码 申请使用高位地址内存 QMAKE LFLAGS Wl large address aware 2 Qt5版本 在 pro文件中添加以下代码 允许使用高位内存 QMAKE LFLAGS WINDO
  • Cocos Creator搞心态小游戏-闯关类 项目展示+完整项目源码

    游戏录像 Cocos Creator搞心态小游戏 闯关类 项目展示 游戏玩法 玩家通过按方向键控制角色移动 跳跃并躲避场景中的陷阱 角色触碰到陷阱会往后摔 直到角色到达摔到安全位置 功能 角色的基本移动前后移动 跳跃 角色触碰陷阱会往后摔
  • centos 7设置redis开机自启

    Linux设置redis开机自启 查询redis conf配置文件的路径 find name redis conf 设置redis conf中daemonize为yes 确保守护进程开启 当Redis以守护进程方式运行时 Redis默认会把
  • SpringBoot 整合 XXL-JOB(执行器)

    合集地址 pom 引入相关依赖 版本要和注册中心对应
  • Matlab - Solidworks 机器人建模(3)如何把URDF文件导入到Matlab

    文章目录 0 前言 1 URDF 转化成 rigidbody tree格式 2 URDF 导入到 simulink 有了urdf文件之后 在matlab里面可以有这两种导入选择 urdf 转化成 rigidbody tree urdf 转化
  • 基础算法【算法习题及模板】上

    目录 排序 快速排序 归并排序 二分 高精度 高精度加法 高精度减法 高精度乘法 高精度除法 排序 快速排序 给定你一个长度为n的整数数列 请你使用快速排序对这个数列按照从小到大进行排序 并将排好序的数列按顺序输出 输入格式 输入共两行 第
  • Linux 查看或统计网卡流量的几种方式【全】

    在工作中 我们经常需要查看服务器的实时网卡流量 通常 我们会通过这几种方式查看Linux服务器的实时网卡流量 目录 1 sar 2 proc net dev 3 ifstat 4 iftop 5 nload 6 iptraf ng 7 ne
  • 我国网民上网最爱干三件事:娱乐聊天看新闻

    中国互联网信息中心 CNNIC 今日发布第24次中国互联网发展状况统计报告 报告显示 我国网民上网最干的三件事分别是 娱乐 聊天 看新闻 报告称 我网民在网络娱乐 信息获取和交流沟通类网络应用上使用率较高 除论坛 BBS外 这三类网络应用在
  • 27条好赚钱副业的途径:自己也能不用上班月入2万+!

    前言 最近我的知乎号也是越做越好了 很多读者私聊我有没有副业可以做 自己平常除本职的工作之外 也会去做一些其他事情 写公众号 搞搞小视频 偶尔还接点小私活 平常还收了几个小徒弟 然而知乎上很多非相关互联网的也给我咨询了好的 不得不说自己还需
  • 基于孪生网络的单目标跟踪持续汇总

    基于Siamese Network的单目标跟踪持续汇总 Visual Object Tracking 从SiamFC开始 涌现了一大批基于孪生神经网络 Siamese Network 的跟踪算法 其中包括多目标跟踪和单目标跟踪 本文将以Si
  • 51单片机用三种方法实现流水灯(超详细)

    51单片机用三种方法实现流水灯 一 数组流水灯 二 移位函数流水灯 三 移位运算符流水灯 一 数组流水灯 定义一组数组分别对应点亮LED1 7 然后利用for循环赋值给p2从而实现流水灯 include
  • 微信用户的 openid 可能会在以下几种情况下发生变化

    微信用户的 openid 可能会在以下几种情况下发生变化 1 用户重新安装微信应用后 会获得一个新的 openid 2 用户在同一设备上切换微信账号后 该设备上存储的 openid 会刷新 3 微信用户设置了 清除缓存 后 也会获得新的 o
  • 项目2-年收入判断

    文章目录 项目2 年收入判断 友情提示 项目描述 数据集介绍 项目要求 数据准备 环境配置 安装 Logistic回归 数据准备 一些有用的函数 梯度与损失 模型训练 绘制损失和精度曲线 预测测试标签 多变量生成模型 数据准备 平均值和协方
  • 概率图模型(PGM):贝叶斯网(Bayesian network)初探

    1 从贝叶斯方法 思想 说起 我对世界的看法随世界变化而随时变化 用一句话概括贝叶斯方法创始人Thomas Bayes的观点就是 任何时候 我对世界总有一个主观的先验判断 但是这个判断会随着世界的真实变化而随机修正 我对世界永远保持开放的态
  • 三层交换机配置OSPF动态路由

    一 建立拓扑图 二 配置主机IP地址 网关 主机号 IP地址 网关 PC 0 192 168 10 101 192 168 10 1 PC 1 192 168 20 101 192 168 20 1 PC 2 192 168 30 101
  • 在IDEA中建好了一个Maven项目后,启动Tomcat,IDEA控制台输出乱码问题的改善

    前言 当我们在IDEA中新建一个Maven项目后 启动Tcomcat访问指定网页时 在IDEA控制台的output窗口会出现中文乱码的情况 对一些人来说 这样看起来很不舒服 为什么会出现这个问题呢 怎样解决这个问题呢 原因 Tomcat的配
  • gorm操作数据库

    gorm官方学习链接 操作总结 func deploy DeploymentConf Get application server instance string error err DB Table DEPLOYTABLENAME Whe
  • ubuntu18.04安装mosquitto及使用

    1 安装 sudo apt add repository ppa mosquitto dev mosquitto ppa sudo apt get update sudo apt get install mosquitto sudo apt