QT C++ 客户端与 Linux C 服务器 HTTP 通信实现智能家居建议

本项目使用 QT C++ 开发客户端,Linux C 开发服务器,通过 HTTP 通信实现智能家居建议功能。

数据库设计

  • 创建用户表
CREATE TABLE IF NOT EXISTS users (
    uid INTEGER PRIMARY KEY AUTOINCREMENT,
    username varchar(10), 
    passwd varchar(10)
);


-- 创建智能家居状态表
CREATE TABLE IF NOT EXISTS Status (
    sid INTEGER PRIMARY KEY AUTOINCREMENT,
    uid INTEGER ,
    device_name varchar(10),
    device_state varchar(10),
    value varchar(10),
    mode varchar(10),
    FOREIGN KEY (uid) REFERENCES users (uid)
);

服务器端设计

  • 服务器端使用 Linux C 语言开发,主要设计模块如下:
    • void startServer():启动服务器,监听特定端口
    • void acceptConnection():接受客户端连接
    • void processClientData(string data):处理客户端发来的数据
    • void sendDataToClient(string data):将数据发送给客户端
    • void closeConnection():关闭与客户端的连接
    • void viewData():查看客户端存储在 SQlite 智能家居状态表中温度和湿度数据
    • void analyzeData():根据温度和湿度数据分析出合理建议

客户端设计

  • 客户端使用 QT C++ 开发,客户在主界面点击进入该界面,当客户在该界面按下 PushButton 后和服务器进行 HTTP 通信,连接成功后在 UI 的 LIneEdit 上显示“服务器已连接”,并将网址 URL 打包成 JSON 文件给服务器,并将服务器发送的信息在 UI 打印出来。

通信流程

  1. 客户端将 URL 打包成 JSON 并通过 HTTP 通信发送给服务器。
  2. 服务器解析 JSON,验证是否可以和客户端进行通信。
  3. 服务器连接 SQlite 数据库,根据 Status 表的空调温度、加湿器湿度向客户端发送建议(例如温度低于 24 摄氏度、湿度小于 40% 大于 70% 时,服务器将发送“空调温度过低,建议提高温度至 26℃;加湿器湿度过高或过低,建议调整加湿器湿度”给客户端,客户端显示在 GUI)。

示例代码

以下是一个简单的示例代码,展示了如何在 QT C++ 中实现客户端与服务器之间的 HTTP 通信,并将 URL 打包成 JSON 发送给服务器,并将服务器发送的信息显示在 UI 上。

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#include <QDebug>

// HTTP 请求回调类
class HttpCallback : public QObject
{
    Q_OBJECT
public:
    explicit HttpCallback(QObject *parent = nullptr) : QObject(parent) {}

signals:
    void requestFinished(bool success, const QString& response);

public slots:
    void onFinished(QNetworkReply *reply)
    {
        QString response = reply->readAll();
        bool success = (reply->error() == QNetworkReply::NoError);
        emit requestFinished(success, response);
        reply->deleteLater();
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建网络访问管理器
    QNetworkAccessManager manager;

    // 创建HTTP 请求回调对象
    HttpCallback callback;

    // 连接请求完成信号
    QObject::connect(&manager, &QNetworkAccessManager::finished, &callback, &HttpCallback::onFinished);

    // 发送HTTP 请求
    QString url = "http://127.0.0.1:8080"; // 服务器地址
    QNetworkRequest request(url);
    QNetworkReply *reply = manager.get(request);

    // 等待请求完成
    QObject::connect(&callback, &HttpCallback::requestFinished, [&](bool success, const QString& response) {
        if (success) {
            // 解析服务器返回的JSON 数据
            QJsonDocument jsonDoc = QJsonDocument::fromJson(response.toUtf8());
            QJsonObject jsonObj = jsonDoc.object();
            QString serverMessage = jsonObj["message"].toString();

            // 在UI 上显示服务器发送的信息
            qDebug() << "服务器返回的信息:" << serverMessage;
        } else {
            qDebug() << "请求失败";
        }

        // 退出应用程序
        QCoreApplication::quit();
    });

    return a.exec();
}

#include "main.moc"

总结

本项目使用 QT C++ 和 Linux C 开发了智能家居建议系统,通过 HTTP 通信实现了客户端与服务器的交互。该系统可以根据智能家居状态表中的数据,向客户端发送合理建议,帮助用户更好地管理智能家居设备。

QT C++ 客户端与 Linux C 服务器 HTTP 通信实现智能家居建议

原文地址: https://www.cveoy.top/t/topic/fBvD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录