• 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


     

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

    1.5重启服务

    service mosquitto restart

    1.6访问
     

    1. #1.客户端:访问本地,用户名:test ;密码:123@123;主题:11
    2. mosquitto_sub -h localhost -p 1883 -u test -P 123@123 -t "11"
    3. #2.服务器端可以查看到一个连接
    4. lsof -i | grep mosquitto
    5. #3.服务器端发布
    6. mosquitto_pub -h localhost -p 1883 -u test -P 123@123 -t "11" -m "helloworld"
    7. #此时客户端可以看到发布了

    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.编译后出错:

      修改成:

    1. connect(socket, static_cast<void(QAbstractSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error),
    2. 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. #1.添加core
    2. QT += core gui network
    3. #2.添加lib
    4. LIBS +=D:\QTPrj\MQTT\build-qtmqtt-Desktop_Qt_5_14_2_MinGW_32_bit-Debug\lib\Qt*.dll



    2..h文件
     

    1. #include
    2. {
    3. private slots:
    4. void on_connectButton_clicked():
    5. void connectSuccessSolt(); //连接成功
    6. void recvMessageSolt();
    7. private:
    8. QMqttClient *client;
    9. }

    3.cpp文件
     

    1. #include
    2. Widget::~Widget()
    3. {
    4. ui->setupUi(this);
    5. client=new QMqttClient;
    6. client->setHostname("");
    7. client->setPort(1883);
    8. client->setUsername("test");
    9. connect(client,&QMqttClient::connected,this,&Widget::connectSuccessSlot);
    10. }
    11. //1.开始连接服务器
    12. void Widget::on_connectButton_clicked()
    13. {
    14. client->connectToHost();
    15. }
    16. //连接成功
    17. void Widget::connectSuccessSlot()
    18. {
    19. QMessageBox::information(this,"连接提示""连接成功"); connect(client,&QMqttClient::messageReceived,this,&Widget::recvMessageSolt);
    20. connect(client,&QMqttClient::disconnected,[this](){
    21. QMessageBox::warning(this,"连接提示","服务器断开");
    22. });
    23. }
    24. //处理消息
    25. void Widget::recvMessageSolt(const QByteArray &ba,const QMqttTopicName &topic)
    26. {
    27. QString str= topic.name()+QString(ba);
    28. ui->textEdit->setText(str);
    29. }
    30. //订阅
    31. void Widget::on_subButton_clicked()
    32. {
    33. client->subscribe(ui->subTopicEdit->text());
    34. }
    35. //发布
    36. void Widget::on_pubButton_clicked()
    37. {
    38. QString msg=ui->msgEdit->text();
    39. QByteArray ba;
    40. ba.append(msg);
    41. client->publish(ui->pubTopicEdit->text(),ba);
    42. }



    3. openssl 里添加 两个库。

     

  • 相关阅读:
    方便面行业调研:预计2028年将达到436亿美元
    Vue3实战(1)
    【二分】Pythagorean Triples—CF1487D
    EdgeX(10) :Xubuntu-22 linux系统安装EdgeX2.1相关服务,服务都比较小,下载启动速度快。
    C++中String类详解以及仿写
    Centos7下zabbix安装与部署,设置中文(保姆级图文)【网络工程】
    MySQL日志管理
    FlowJo 10.4.0(流式细胞分析器工具)
    原料厂与烧结工艺
    网络原理
  • 原文地址:https://blog.csdn.net/aggie4628/article/details/125800691