QT(37)-mosquitto-MQTT客户端

1.MQTT服务器端下载安装mosquitto
2.MQTT客户端 QT版


1.MQTT服务器端下载安装mosquitto
1.1安装服务器端

sudo apt-get install mosquitto

1.2安装客户端

sudo apt-get install mosquitto-clients

1.3安装设备端

sudo apt-get install mosquitto-dev

1.4修改配置文件
 cd /etc/mosquitto
vim mosquitto.conf


 

allow_anonymous false                         #表示不可以匿名访问
password_file  /etc/mosquitto/pwfile.example  #用户和密码放在pwfile.example

1.5重启服务

service mosquitto restart

1.6访问
 

#1.客户端:访问本地,用户名:test ;密码:123@123;主题:11
mosquitto_sub -h localhost -p 1883 -u test -P 123@123 -t "11"


#2.服务器端可以查看到一个连接
lsof -i | grep mosquitto


#3.服务器端发布
mosquitto_pub -h localhost -p 1883 -u test -P 123@123 -t "11" -m "helloworld"

#此时客户端可以看到发布了

2.QT版的MQTT客户端
2.1环境配置:

下载  https://github.com/qt/qtmqtt/tree/5.15
配置:项目->配置
双击.pro文件做配置


常见问题:
1.没有头文件:
   把头文件复制后放入QT的安装目录下。文件夹名称位QtMqtt
D:\ProgramData\Qt\Qt5.14.2\5.14.2\mingw73_32\include\
2.编译后出错:

  修改成:

connect(socket, static_cast<void(QAbstractSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error),
    this, static_cast<void(QMqttConnection::*)(QAbstractSocket::SocketError)>(&QMqttConnection::transportError) );

3.复制被编译好的两个文件:bin目录下:Qt5Mqtt.dll,Qt5Mqttd.dll
  复制后放入QT的安装目录下 D:\ProgramData\Qt\Qt5.14.2\5.14.2\mingw73_32\bin

2.2第一个demo程序:

 1.pro文件设置:network

 

#1.添加core
QT       += core gui network


#2.添加lib
LIBS +=D:\QTPrj\MQTT\build-qtmqtt-Desktop_Qt_5_14_2_MinGW_32_bit-Debug\lib\Qt*.dll



2..h文件
 

#include <QtMqtt/qmqttclient.h>
{
    private slots:
    void on_connectButton_clicked():
    void connectSuccessSolt();      //连接成功
    void recvMessageSolt();
   private:
   QMqttClient *client;
}

3.cpp文件
 

#include <QMessageBox>

Widget::~Widget()
{
    ui->setupUi(this);
client=new QMqttClient;
client->setHostname("");
client->setPort(1883);
client->setUsername("test");
connect(client,&QMqttClient::connected,this,&Widget::connectSuccessSlot);
}
//1.开始连接服务器
void Widget::on_connectButton_clicked()
{
   client->connectToHost();
}
//连接成功
void Widget::connectSuccessSlot()
{   
   QMessageBox::information(this,"连接提示","连接成功");    connect(client,&QMqttClient::messageReceived,this,&Widget::recvMessageSolt);
connect(client,&QMqttClient::disconnected,[this](){
    QMessageBox::warning(this,"连接提示","服务器断开");
});
}
//处理消息
void Widget::recvMessageSolt(const QByteArray &ba,const QMqttTopicName &topic)
{
    QString str= topic.name()+QString(ba);
    ui->textEdit->setText(str);
}
//订阅
void Widget::on_subButton_clicked()
{
    client->subscribe(ui->subTopicEdit->text());
}
//发布
void Widget::on_pubButton_clicked()
{
    QString msg=ui->msgEdit->text();
    QByteArray ba;
    ba.append(msg);
    client->publish(ui->pubTopicEdit->text(),ba);
}



3. openssl 里添加 两个库。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQTT(Message Queue Telemetry Transport)是一种轻量级的消息传输协议,适用于物联网设备与服务器之间的数据传输,具有低带宽、低功耗、高可靠性等特点。Qt是一种跨平台的C++图形界面应用程序开发框架,具有简单易学、代码简洁、易于维护等优点,可以用来实现MQTT客户端。下面将介绍如何在Qt中实现MQTT客户端。 1.安装MQTTQt没有自带MQTT库,需要手动安装第三方库。可以选择paho.mqtt.c或eclipse.mosquitto等开源MQTT库,这里以paho.mqtt.c为例。下载并解压paho.mqtt.c库,将其包含到Qt项目中,同时在.pro文件中添加如下语句: INCLUDEPATH += $$PWD/paho.mqtt.c/include LIBS += -L$$PWD/paho.mqtt.c/build/output -lpaho-mqtt3as-static 2.实现MQTT客户端Qt中实现MQTT客户端,需要用到MQTT库中的头文件和API函数。下面以订阅主题为例,展示如何在Qt中实现MQTT客户端: #include <stdio.h> #include <stdlib.h> #include <string.h> #include "MQTTClient.h" #define ADDRESS "tcp://localhost:1883" #define CLIENTID "ExampleClientSub" #define TOPIC "sample/topic" #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) { printf("Message arrived\n"); printf(" topic: %s\n", topicName); printf(" message: %.*s\n", message->payloadlen, (char*)message->payload); MQTTClient_freeMessage(&message); MQTTClient_free(topicName); return 1; } void connlost(void *context, char *cause) { printf("\nConnection lost\n"); printf(" cause: %s\n", cause); } int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; int rc; MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered); if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); exit(EXIT_FAILURE); } MQTTClient_subscribe(client, TOPIC, QOS); printf("Subscribed to topic %s\n", TOPIC); getchar(); MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); return rc; } 3.编译运行MQTT客户端 将以上代码保存为main.c文件,运行以下命令编译生成可执行文件: gcc -o main main.c -lpaho-mqtt3as 运行可执行文件即可实现MQTT客户端的订阅功能。 以上就是利用Qt实现MQTT客户端的步骤。通过第三方MQTT库和Qt的API函数,可以方便地实现MQTT客户端的开发,适用于物联网等领域的数据传输和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值