ubuntu18.04安装mosquitto及使用

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);

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值