Qt实现mqtt客户端和mqtt服务器搭建
创始人
2025-06-01 13:13:43
0
  1. 下载qtmqtt源码

下载地址:https://github.com/qt/qtmqtt,选择跟自己使用Qt版本一致的分支

  1. 使用qmake编译qtmqtt源码

编译环境:Ubuntu1804+Qt5.13.2

cd qtmqtt
mkdir .git
mkdir build && cd build
qmake .. (此步执行报错的话请选用qmake的绝对路径)
make 
make install

3. 编写Qt客户端测试程序

  1. pro 文件增加

QT  +=  mqtt
  1. .h文件主要代码

#include void initMqttClinet();private slots:void on_pBtn_Connect_clicked();void stateChangedSlot(QMqttClient::ClientState state);void errorChangedSlot(QMqttClient::ClientError error);void messageReceivedSlot(const QByteArray &message, const QMqttTopicName &topic = QMqttTopicName());void on_pBtn_Publish_clicked();void on_pBtn_Subscribe_clicked();void on_pBtn_Ping_clicked();private:QMqttClient* mqttClient;
  1. .cpp文件主要代码

void MainWindow::initMqttClinet()
{mqttClient = new QMqttClient();mqttClient->setHostname(ui->lineEditHost->text().trimmed());mqttClient->setPort(1883);mqttClient->setProtocolVersion(QMqttClient::MQTT_3_1_1);mqttClient->setClientId(ui->lineEditClientId->text().trimmed());mqttClient->setUsername("admin");mqttClient->setPassword("password");connect(mqttClient, &QMqttClient::stateChanged, this, &MainWindow::stateChangedSlot);connect(mqttClient, &QMqttClient::errorChanged, this, &MainWindow::errorChangedSlot);connect(mqttClient, &QMqttClient::messageReceived, this, &MainWindow::messageReceivedSlot);mqttClient->connectToHost();
}void MainWindow::on_pBtn_Connect_clicked()
{initMqttClinet();
}void MainWindow::stateChangedSlot(QMqttClient::ClientState state)
{QString info("");if(state == 0){info = QString("mqtt disconnected. error:%1" ).arg(mqttClient->error());}else if(state == 1){info = "mqtt connecting";}else if(state == 2){info = QString("mqtt connected. hostname:%1").arg(mqttClient->hostname());}ui->editLog->insertPlainText(QDateTime::currentDateTime().toString()+ QString("state:%1 info:%2\n").arg(state).arg(info));
}void MainWindow::errorChangedSlot(QMqttClient::ClientError error)
{qDebug()<<__FILE__<<__LINE__<editLog->insertPlainText(QString("error:%1").arg(error));
}void MainWindow::messageReceivedSlot(const QByteArray &message, const QMqttTopicName &topic)
{qDebug()<<__FILE__<<__LINE__<editLog->insertPlainText(content);
}void MainWindow::on_pBtn_Publish_clicked() // 发布
{if(mqttClient == nullptr){ui->editLog->insertPlainText(QString("[Error] Before publish, Please init mqtt client.\n"));return;}if (mqttClient->publish(ui->lineEditTopic->text(),ui->lineEditMessage->text().toUtf8()) == -1){ui->editLog->insertPlainText(QString("[Error] Could not publish message.\n"));}
}void MainWindow::on_pBtn_Subscribe_clicked() // 订阅
{if(mqttClient == nullptr){ui->editLog->insertPlainText(QString("[Error]  Before subscribe, Please init mqtt client.\n"));return;}auto subscription = mqttClient->subscribe(ui->lineEditTopic->text());if (!subscription) {ui->editLog->insertPlainText(QString("[Error] Could not subscribe. Is there a valid connection?\n"));return;}
}void MainWindow::on_pBtn_Ping_clicked()
{bool res = mqttClient->requestPing();ui->editLog->insertPlainText(QString("[RESULT] PING? %1\n").arg(res));
}
  1. 界面截图

4.部署mqtt服务端

  1. Windows部署mosquitto

  1. 下载地址:https://mosquitto.org/download/

  1. 参考连接:https://blog.csdn.net/linyibin_123/article/details/128315580

  1. Linux部署EMQX

  1. 下载地址:https://www.emqx.com/zh/try?product=broker

  1. 安装方法如界面下图所示

  1. 打开浏览器测试服务端

输入url:http://127.0.0.1:18083打开界面如下图所示则表示服务器端已启动

初次登录时,默认用户名为admin,密码为public;需要根据提示自行设置密码。

1883(暴露给外部的MQTT服务端口),18083(服务器控制面板端口)

相关内容

热门资讯

经典美文摘抄及赏析 关于经典美文摘抄及赏析  导读:随着网络文化的发展,美文的概念已经不限定于某种文体,或某类内容。网络...
生活启示的散文 雨夜的散文推荐度:春的散文推荐度:月亮的散文推荐度:钓鱼的启示教学设计推荐度:《钓鱼的启示》教学设计...
记忆大雪飘飞时的抒情散文 记忆大雪飘飞时的抒情散文  在学习、工作、生活中,大家都写过散文吗?散文分为叙事散文、抒情散文、哲理...
你是我的风景的情感散文 你是我的风景的情感散文  一路过很多城市 一路看很多人群 匆匆忙忙的在行程里睡了又醒 飘忽不定 这也...
抒情散文:十年的约定 抒情散文:十年的约定  君子之约:执子之手,与子偕老。  那年,君骑竹马来,绕床弄青梅。我们都还只是...
自由行走抒情散文 自由行走抒情散文  夫天地者,万物之逆旅;光阴者,百代之过客。而浮生若梦,为几何?在广袤的天地中,在...
路遥《平凡的世界》的经典语录 路遥《平凡的世界》的经典语录大全  在平日的学习、工作和生活里,大家都对那些经典语录很是熟悉吧,语录...
近乡情怯经典散文 近乡情怯经典散文  在日常学习、工作抑或是生活中,大家都经常看到散文的身影吧?散文是一种常见的文学体...
岳父经典散文 岳父经典散文  在现实生活或工作学习中,大家经常看到散文吧?散文是一种常见的文学体裁,取材广泛,艺术...
大美三峡散文 大美三峡散文  一、传统诗文中的三峡形象  江水奔流、壁立千仞、激流险滩、千帆竞渡、巫山云雨、猿声啼...
散文今时明月旧时约 散文今时明月旧时约  错爱过多少冷酷的月亮,我才能看清自己。这一行行饱含深情的文字,只愿成为一生难忘...
春天的散文 春天的散文300字9篇  春天到来了,湖边的柳树露出一束束新叶,在湖边随风飘扬,婀娜多姿。小编整理的...
青草青青散文 青草青青散文(精选15篇)  在平平淡淡的日常中,许多人都写过散文吧?散文分为叙事散文、抒情散文、哲...
愿岁月温柔以待优秀散文 愿岁月温柔以待优秀散文(通用20篇)  无论是身处学校还是步入社会,大家都不可避免的会接触到散文吧?...
守住一颗宁静的心经典散文 守住一颗宁静的心经典散文  生活是一望无际的大海,人便是大海上的一叶扁舟,大海没有风平浪静的时候,所...
雪的短文散文 雪的短文散文  冬日的早晨,随着闹铃的响起,钻出暖暖的被窝,拉开窗帘。心中不觉掠过一阵惊喜:屋顶上、...
迪卡尔 中秋夜散文 迪卡尔 中秋夜散文  1  往年的中秋与今年的中秋并没有太大的差别,只是,对我来说,迪卡尔的出现,让...
散文近来可好 散文近来可好  曾经默默无言的静潜在同学群里,记得毕业那天,你在我的毕业留言本上绘着几株倩倩的青竹,...
酸石榴,甜石榴散文 酸石榴,甜石榴散文  老家院里种了两株石榴,约二十余年树龄,都有黝黑的粗干虬枝,一北一南,分据院子两...
爱情散文:有一种距离与爱无关 精选爱情散文:有一种距离与爱无关  两个人从陌生到相识,到有好感,到热恋,之间的距离愈来愈小;再到后...