HTTP 协议编程

一、http 协议基础知识

       
1、http:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求- 响应协议,它通常运行在 TCP 之上。作用:规定 WWW 服务器与浏览器之间信息传递规范, 是二者共同遵守的协议。

2、http 工作原理:HTTP 是基于客户/服务器模式,且面向连接的。
HTTP 事务处理 流程:
 1 客户与服务器建立连接;
 2 客户向服务器提出请求;
 3 服务器接受请求,并根据请求返回相应的文件作为应答;
 4 客户与服务器关闭连接。

二、案例一

头文件:

#include // 提供编程TCP/IP客户端和服务器的类
#include // 提供接口使用URLs

class QNetworkAccessManager; class QNetworkReply; // 此类是QIODevice的子类

#include "mainwindow.h"        // 引入主窗口的头文件
#include "ui_mainwindow.h"     // 引入用户界面相关的头文件

MainWindow::MainWindow(QWidget *parent)  // 主窗口构造函数
    : QMainWindow(parent)                // 初始化基类QMainWindow
    , ui(new Ui::MainWindow)             // 创建Ui类的实例
{
    ui->setupUi(this);                   // 设置用户界面

    mgr = new QNetworkAccessManager(this); // 创建网络访问管理器实例,负责处理网络请求

    // 连接网络请求完成信号和槽函数,当请求完成时调用replayFinishedFunc
    connect(mgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(replayFinishedFunc(QNetworkReply*)));
}

MainWindow::~MainWindow()                 // 主窗口析构函数
{
    delete ui;                             // 删除用户界面实例,释放内存
}

void MainWindow::replayFinishedFunc(QNetworkReply *reply) // 响应处理槽函数
{
    QString strall = reply->readAll();    // 读取网络回复的数据
    ui->textBrowser->setText(strall);     // 将读取到的数据展示在文本浏览器中
    reply->deleteLater();                  // 释放网络回复对象的内存
}

void MainWindow::on_pushButton_GetData_clicked() // 按钮点击事件处理函数
{
    ui->label_disp->setText("数据正在下载中,请耐心等待......"); // 更新标签,提示用户正在下载
    mgr->get(QNetworkRequest(QUrl("http://www.baidu.com"))); // 发送GET请求,获取指定URL的数据
}

三、案例二

#include "mainwindow.h"        // 引入主窗口的头文件
#include "ui_mainwindow.h"     // 引入用户界面相关的头文件

MainWindow::MainWindow(QWidget *parent)  // 主窗口构造函数
    : QMainWindow(parent)                // 初始化基类QMainWindow
    , ui(new Ui::MainWindow)             // 创建Ui类的实例
{
    ui->setupUi(this);                   // 设置用户界面

    mgr = new QNetworkAccessManager(this); // 创建网络访问管理器实例,负责处理网络请求

    // 连接网络请求完成信号和槽函数,当请求完成时调用replayFinishedFunc
    connect(mgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(replayFinishedFunc(QNetworkReply*)));
}

MainWindow::~MainWindow()                 // 主窗口析构函数
{
    delete ui;                             // 删除用户界面实例,释放内存
}

void MainWindow::replayFinishedFunc(QNetworkReply *reply) // 响应处理槽函数
{
    QString strall = reply->readAll();    // 读取网络回复的数据
    ui->textBrowser->setText(strall);     // 将读取到的数据展示在文本浏览器中
    reply->deleteLater();                  // 释放网络回复对象的内存
}

void MainWindow::on_pushButton_GetData_clicked() // 按钮点击事件处理函数
{
    ui->label_disp->setText("数据正在下载中,请耐心等待......"); // 更新标签,提示用户正在下载
    mgr->get(QNetworkRequest(QUrl("http://www.baidu.com"))); // 发送GET请求,获取指定URL的数据
}

代码结构分析

  1. 头文件和类定义

    • 包含了主窗口和用户界面相关的头文件,表明这是一个基于Qt的应用程序。
  2. 构造函数

    • MainWindow::MainWindow(QWidget *parent)是主窗口类的构造函数。在这里,首先调用了基类QMainWindow的构造函数,然后创建了一个QNetworkAccessManager对象以便进行网络请求。
    • 使用connect函数连接了QNetworkAccessManagerfinished信号与槽函数replayFinishedFunc,这样当网络请求完成时会自动调用该函数。
  3. 析构函数

    • MainWindow::~MainWindow()是析构函数,用来释放构造函数中分配的内存,防止内存泄漏。
  4. 响应处理槽函数

    • void MainWindow::replayFinishedFunc(QNetworkReply *reply)是处理网络请求响应的槽函数。它读取网络回复的数据,并将其显示在界面的文本浏览器中。使用reply->deleteLater()来确保后续释放内存。
  5. 按钮点击事件处理

    • void MainWindow::on_pushButton_GetData_clicked()是处理用户点击按钮事件的函数。它更新标签文本提示用户正在下载数据,然后发送网络请求获取数据。使用QNetworkRequestQUrl构造出请求的URL。

总结

这个Qt应用程序的主要功能是通过网络请求获取数据并显示在用户界面上。它使用了信号与槽机制处理异步的网络请求。在设计上,结构清晰,功能模块化,有助于维护和扩展。每个功能都被封装在独立的函数中,有利于代码的可读性和可维护性。**

你可能感兴趣的:(qt,http,网络协议,网络)