#include "HttpServer.h" HttpServer::HttpServer(QObject *parent) : QObject(parent) { httpServer = new QTcpServer(this); httpServer->setMaxPendingConnections(1024); QObject::connect(httpServer, &QTcpServer::newConnection, this, &HttpServer::newConnection); } HttpServer::~HttpServer() { } HttpServer &HttpServer::instance() { static HttpServer obj; return obj; } bool HttpServer::run(const QHostAddress &address, const quint16 &port) { bool succ = httpServer->listen(QHostAddress::LocalHost, port); return succ; } void HttpServer::newConnection() { QTcpSocket * m_socket = httpServer->nextPendingConnection(); QObject::connect(m_socket, &QTcpSocket::readyRead, this, &HttpServer::readyRead); } void HttpServer::readyRead() { QTcpSocket * socket = qobject_cast<QTcpSocket*>(sender()); if(socket) { QByteArray request = socket->readAll(); // 获取接口方法名 int postIdx = request.indexOf("POST"); int httpIdx = request.indexOf("HTTP/"); if (postIdx >= 0 && httpIdx >= 0) { method = request.mid(postIdx + 5, httpIdx - postIdx - 6); } // 获取传递的参数数据 int startIdx = request.indexOf('{'); if (startIdx > 0) { content.append(request.mid(startIdx, request.size() - startIdx - 1)); } else { content.append(request); } if (request.at(request.size() - 1) == '}') { QByteArray response = this->buildHeartBeatResponse().toUtf8(); QString http = "HTTP/1.1 200 OK\r\n"; http += "Server: qt server\r\n"; http += "Content-Type: application/json;charset=utf-8\r\n"; http += "Connection: keep-alive\r\n"; http += QString("Content-Length: %1\r\n\r\n").arg(QString::number(response.size())); socket->write(http.toUtf8()); socket->write(response); socket->flush(); socket->waitForBytesWritten(http.size() + response.size()); socket->close(); } } } QString HttpServer::buildHeartBeatResponse() { QJsonObject resp; resp.insert("code", 200); resp.insert("success", true); return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); } QString HttpServer::buildRemoteAddResponse() { QJsonObject resp; resp.insert("code", 200); resp.insert("success", true); resp.insert("count", 1); return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); } QString HttpServer::buildRemoteDeleteResponse() { QJsonObject resp; resp.insert("code", 200); resp.insert("success", true); resp.insert("count", 1); return QString(QJsonDocument(resp).toJson(QJsonDocument::Compact)); }