当前位置: 首页 > article >正文

【QT】HTTP服务器

QTcpServer类

QTcpServer是Qt网络模块中的一个网络通信类,它提供了一个简单而强大的方式来实现服务器端的网络通信,使开发者能够轻松地创建TCP服务器应用程序

特点

  1. 监听和处理连接请求:QTcpServer允许应用程序监听并处理传入的TCP连接请求。它能够在指定的IP地址和端口上开始监听,当有新的客户端连接时,会发出newConnection信号。
  2. 并发处理:QTcpServer能够处理多个客户端同时连接,通过多线程或事件循环等机制实现并发处理,从而提高服务器端的性能和效率。
  3. 简化网络编程:QTcpServer封装了TCP协议的复杂细节,提供了更高级别的接口,简化了网络编程的复杂性。开发者无需深入了解TCP协议的底层细节,即可实现网络通信。
  4. 灵活的事件处理:QTcpServer通过信号和槽机制处理连接建立、断开、数据到达等事件,实现了灵活的连接管理和数据处理。

函数

  1. 构造函数:QTcpServer(QObject *parent = nullptr)用于创建一个QTcpServer对象。
  2. listen:bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)用于在指定的地址和端口上监听传入的连接请求。
  3. close:void close()用于停止服务器,并断开所有现存连接。
  4. isListening:bool isListening() const用于判断服务器是否正在监听。
  5. nextPendingConnection:QTcpSocket *nextPendingConnection()用于返回下一个等待处理的客户端连接。
  6. maxPendingConnections:int maxPendingConnections() const用于返回最大待处理连接数。
  7. setMaxPendingConnections:void setMaxPendingConnections(int numConnections)用于设置最大待处理连接数。
  8. hasPendingConnections:bool hasPendingConnections() const用于判断是否有待处理的客户端连接。
  9. serverAddress:QHostAddress serverAddress() const用于返回服务器的地址。
  10. serverPort:quint16 serverPort() const用于返回服务器的端口。
  11. errorString:QString errorString() const用于返回最后一个错误的描述

信号

  1. newConnection:当有新的客户端连接时发出此信号。
  2. acceptError:当接受连接时发生错误时发出此信号。

创建HTPP服务

创建服务

    QTcpServer* tcpServer = new QTcpServer(this);
    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newClient())); //连接客户端
    tcpServer->listen(QHostAddress(ip), port); // 设置地址和端口监听传入的请求

获取客户端

void MainWindow::newClient()
{
   
    // 连接客户端
    QTcpSocket* clientSocket = tcpServer->nextPendingConnection();
    connect(clientSocket, &QTcpSocket::readyRead, this, &MainWindow::readDatagram);
    // 当客户端断开连接时,需要确保及时释放与客户端通信的QTcpSocket对象所占用的资源
    connect(clientSocket, &QTcpSocket::disconnected, clientSocket, &QTcpSocket::deleteLater);

    logger->log("Socket 连接成功");
}

解析客户端传入的http请求 post get

// 构件http响应
QByteArray buildHttpResponse(const QByteArray& body, int statusCode)
{
   
    QString statusLine = QString("HTTP/1.1 %1 OK\r\n").arg(statusCode);
    QByteArray response = statusLine.toUtf8();
    response += "Content-Type: application/json\r\n";
    response += "Content-Length: " + QByteArray::number(body.size()) + "\r\n";
    response 

http://www.kler.cn/a/370440.html

相关文章:

  • 数据挖掘:电商会员价值分析模型方案
  • txt数据转为pdf格式并使用base64解密输出
  • 【MATLAB源码-第194期】基于matlab的MB-OFDM仿真,超宽带(UWB)无线传输。对比LS/DFT及其改进算法。
  • Cmake Error:could not find any instance of Visual Studio.
  • 使用Git进行团队协作开发
  • (1)程序设计与数据结构连续剧
  • flex常用固定搭配
  • JS轮播图实现自动轮播、悬浮停止轮播、点击切换,下方指示器与图片联动效果
  • linux中各目录作用及介绍
  • c++中的this指针
  • Uniapp如何处理后端返回图片流验证码
  • YOLOv11在目标检测中的应用及其与PaddleDetection的对比
  • XXE 漏洞
  • CentOS系统安全配置详解:打造安全可靠的服务器防护
  • 006:无人机气象学知识
  • vue3中ref和reactive的用法,区别和优缺点,以及使用场景
  • vivo 轩辕文件系统:AI 计算平台存储性能优化实践
  • Pandas数据结构之Series对象
  • 【Unity踩坑】UWP应用未通过Windows应用认证:API不支持
  • AMQP + mysql + REST API 分布式系统和微服务架构