qt http server
时间: 2023-09-22 15:10:58 浏览: 194
基于Qt的HTTP服务器
Qt 提供了一个名为 Qt Network 的模块,其中包含一个名为 QTcpServer 的类,可以用于创建一个基于 TCP 协议的服务器。通过使用 QTcpServer 类,可以轻松地创建一个基于 Qt 的 HTTP 服务器。
以下是一个简单的示例代码,演示如何使用 QTcpServer 类创建一个 HTTP 服务器:
```cpp
#include <QTcpServer>
#include <QTcpSocket>
#include <QByteArray>
#include <QTextStream>
class HttpServer : public QTcpServer
{
Q_OBJECT
public:
HttpServer(QObject *parent = nullptr) : QTcpServer(parent) {}
protected:
void incomingConnection(qintptr socketDescriptor) override
{
QTcpSocket *socket = new QTcpSocket(this);
socket->setSocketDescriptor(socketDescriptor);
connect(socket, &QTcpSocket::readyRead, this, &HttpServer::readRequest);
}
private slots:
void readRequest()
{
QTcpSocket *socket = static_cast<QTcpSocket *>(sender());
QByteArray requestData = socket->readAll();
QTextStream stream(requestData);
QString requestLine;
stream >> requestLine;
if (requestLine == "GET / HTTP/1.1\r\n")
{
socket->write("HTTP/1.1 200 OK\r\n");
socket->write("Content-Type: text/html\r\n");
socket->write("\r\n");
socket->write("<html><body><h1>Hello, world!</h1></body></html>");
socket->flush();
socket->waitForBytesWritten();
socket->close();
}
else
{
socket->write("HTTP/1.1 404 Not Found\r\n");
socket->flush();
socket->waitForBytesWritten();
socket->close();
}
}
};
```
在上面的示例中,HttpServer 类继承自 QTcpServer,并重写了 incomingConnection() 方法。在 incomingConnection() 方法中,我们创建了一个 QTcpSocket 对象,并将其连接到 readyRead() 信号。这样,每当有新的连接到达时,就会创建一个新的 QTcpSocket 对象,并将其连接到 readRequest() 槽函数。
在 readRequest() 槽函数中,我们首先从 QTcpSocket 中读取请求数据,并将其解析为请求行。如果请求行是 "GET / HTTP/1.1\r\n",我们就返回一个简单的 HTML 页面,否则返回一个 404 错误页面。
这只是一个简单的示例,你可以根据需要对代码进行修改和扩展,以满足你的实际需求。
阅读全文