以下是一个示例的客户端Qt C++和Linux C服务器进行http数据通信的代码:

客户端Qt C++代码:

#include <QtNetwork>
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#include <QDebug>

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

    QNetworkAccessManager manager;
    QNetworkRequest request;

    // 设置请求URL
    request.setUrl(QUrl("http://localhost:8080"));

    // 发送问候消息给服务器
    QJsonObject greeting;
    greeting["message"] = "Hello server!";
    QJsonDocument greetingDoc(greeting);
    QByteArray greetingData = greetingDoc.toJson();
    manager.post(request, greetingData);

    // 接收服务器的回复
    QObject::connect(&manager, &QNetworkAccessManager::finished, [&](QNetworkReply *reply) {
        QByteArray responseData = reply->readAll();
        QJsonDocument responseDoc = QJsonDocument::fromJson(responseData);
        QJsonObject responseObj = responseDoc.object();
        QString advice = responseObj["advice"].toString();
        qDebug() << "Received advice from server: " << advice;
        // 在GUI中显示建议
    });

    return a.exec();
}

Linux C服务器代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

#define MAX_BUFFER_SIZE 1024

void handleClient(int clientSocket) {
    char buffer[MAX_BUFFER_SIZE];
    memset(buffer, 0, MAX_BUFFER_SIZE);

    // 接收客户端的问候消息
    ssize_t bytesRead = recv(clientSocket, buffer, MAX_BUFFER_SIZE, 0);
    if (bytesRead > 0) {
        printf("Received greeting from client: %s\n", buffer);

        // 从数据库中获取智能家居状态表最新的温度、湿度数据
        // 制定建议
        char advice[MAX_BUFFER_SIZE];
        snprintf(advice, MAX_BUFFER_SIZE, "空调温度过低,建议提高温度至26℃;加湿器湿度过高或过低,建议调整加湿器湿度");

        // 将建议发送给客户端
        send(clientSocket, advice, strlen(advice), 0);
    }

    close(clientSocket);
}

int main() {
    int serverSocket, clientSocket;
    struct sockaddr_in serverAddress, clientAddress;
    socklen_t clientAddressLength = sizeof(clientAddress);

    // 创建服务器socket
    serverSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (serverSocket < 0) {
        perror("Failed to create socket");
        exit(EXIT_FAILURE);
    }

    // 设置服务器地址
    memset(&serverAddress, 0, sizeof(serverAddress));
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_addr.s_addr = INADDR_ANY;
    serverAddress.sin_port = htons(8080);

    // 绑定服务器地址
    if (bind(serverSocket, (struct sockaddr *)&serverAddress, sizeof(serverAddress)) < 0) {
        perror("Failed to bind socket");
        exit(EXIT_FAILURE);
    }

    // 监听连接请求
    if (listen(serverSocket, 5) < 0) {
        perror("Failed to listen");
        exit(EXIT_FAILURE);
    }

    while (1) {
        // 接受客户端连接
        clientSocket = accept(serverSocket, (struct sockaddr *)&clientAddress, &clientAddressLength);
        if (clientSocket < 0) {
            perror("Failed to accept connection");
            exit(EXIT_FAILURE);
        }

        // 处理客户端请求
        handleClient(clientSocket);
    }

    close(serverSocket);

    return 0;
}

请注意,这只是一个示例代码,实际应用中可能需要根据具体需求进行适当修改。此外,还需要在服务器端进行数据库查询和建议制定的实现

- 创建用户表CREATE TABLE IF NOT EXISTS users uid INTEGER PRIMARY KEY AUTOINCREMENT username varchar10 passwd varchar10;-- 创建智能家居状态表CREATE TABLE IF NOT EXISTS Status sid INTEGER PRIMARY KEY A

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

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