Qt加载MQTT库的方法,以及实现MQTT通信的例子(发布订阅均测试成功)

MQTT库的加载方法很多,在此推荐两篇博文(我这里就不再赘述):
Qt官方MQTT库的使用,附一个MqttClient例子
Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建
Qt官方MQTT库的使用

值得注意的是,mqtt目前主要有两个版本,一个是第三方库,一个是qt官方库,两者都需要自己下载源码生成库,另外在方法接口、函数的使用上还是有些区别,注意千万不要弄混了,我当时就是把方法弄混了折腾了好久。。。。

下面是测试代码:

连接:

//连接
void MainWindow::on_pushButton_connect_clicked()
{
    if (m_client->state() == QMqttClient::Disconnected)
    {
        ui->pushButton_connect->setText(tr("断开"));
        m_client->setHostname(ui->lineEdit_host->text());
        m_client->setPort(ui->lineEdit_port->text().toInt());
        m_client->setUsername(ui->lineEdit_user->text());
        m_client->setPassword(ui->lineEdit_pwd->text());
        m_client->setClientId("1234");

        m_client->setKeepAlive(120);

        ui->lineEdit_host->setEnabled(false);
        ui->lineEdit_port->setEnabled(false);
        ui->lineEdit_user->setEnabled(false);
        ui->lineEdit_pwd->setEnabled(false);

        m_client->connectToHost();
    }
    else
    {//断开连接
        ui->pushButton_connect->setText(tr("连接"));
        ui->lineEdit_host->setEnabled(true);
        ui->lineEdit_port->setEnabled(true);
        ui->lineEdit_user->setEnabled(true);
        ui->lineEdit_pwd->setEnabled(true);

        m_client->disconnectFromHost();
        ui->textEdit->append("连接断开!!!");
    }
}

发布

//发布
void MainWindow::on_pushButton_2_clicked()
{
    QString topicPub;
    QByteArray messagePub;
    if(m_client->state() == QMqttClient::Connected)
    {
        topicPub = ui->lineEdit_pub->text();
        messagePub = ui->lineEdit_pubMsg->text().toUtf8();

        m_client->publish(topicPub, messagePub, 0);
        return;
    }
    ui->textEdit->append("请连接后重新操作!");
}

订阅

//订阅
void MainWindow::on_pushButton_clicked()
{
    QString topicSub;
    int qos;
    if(m_client->state() == QMqttClient::Connected)
    {
        topicSub = ui->lineEdit_sub->text();
        qos = ui->spinBox->text().toInt();
        m_client->subscribe(topicSub, qos);
        return;
    }
    ui->textEdit->append("请连接后重新操作!");
}

接收消息

//收到消息
void MainWindow::topicMessageReceived(const QByteArray &message, const QMqttTopicName &topic)
{
    QString content;
    content = QDateTime::currentDateTime().toString() + QLatin1Char('\n');
    content += QLatin1String(" Received Topic: ") + topic.name() + QLatin1Char('\n');
    content += QLatin1String(" Message: ") + message + QLatin1Char('\n');
    ui->textEdit->append(content);
}

测试结果图

Qt加载MQTT库的方法,以及实现MQTT通信的例子(发布订阅均测试成功)_第1张图片

MQTT主要就是通过服务器代理,实现两个客户端之间的通信,上图就展示了两个客户端通信成功!

MQTT客户端测试完整源码下载

温馨提示源码里面的服务器IP和用户名需要自己改,我使用的是公司服务器,暂不提供

不下载,这里也有源码参考,挺详细的

你可能感兴趣的:(Qt)