- 创建用户表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
以下是一个示例的客户端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;
}
请注意,这只是一个示例代码,实际应用中可能需要根据具体需求进行适当修改。此外,还需要在服务器端进行数据库查询和建议制定的实现
原文地址: http://www.cveoy.top/t/topic/iz3H 著作权归作者所有。请勿转载和采集!