网络编程
Qt常用的网络编程类:
| 类名 | 描述 | 主要功能 |
|---|---|---|
| QTcpSocket | 用于处理 TCP 协议的客户端和服务器的通信。 | 是处理 TCP 数据传输的主要类。 |
| QTcpServer | 用于创建一个 TCP 服务器,监听来自客户端的连接请求。 | 创建一个 TCP 服务器并管理客户端连接。 |
| QUdpSocket | 用于处理 UDP 协议的通信。 | 提供发送和接收 UDP 数据的功能。 |
| QNetworkAccessManager | 用于处理网络请求和响应,如 HTTP 请求。 | 是进行网络请求的主要类,支持异步操作。 |
| QNetworkRequest | 用于配置网络请求。 | 配置和定制网络请求的参数。 |
| QNetworkReply | 用于接收网络响应数据。 | 接收和处理网络响应。 |
| QUrl | 用于处理 URL。 | 解析、构建和查询 URL。 |
| QNetworkInterface | 用于处理网络接口的信息。 | 提供网络接口的相关信息。 |
| QHostAddress | 用于处理 IP 地址。 | 表示和操作 IP 地址。 |
| QTcpDatagram | 用于处理 TCP 数据报文的封装和解析。 | 提供对 TCP 数据报文的操作。 |
| QNetworkDatagram | 用于表示网络数据报文的接口。 | 与 QTcpSocket 或 QUdpSocket 结合使用来发送和接收数据。 |
| QAbstractSocket | 是所有套接字类的抽象基类。 | 提供通用的套接字接口和信号/槽机制来处理网络事件。 |
主机信息查询
获取主机信息可以通过多种方式实现,主要利用 Qt 的 QSysInfo 类以及其他相关的类。
QSysInfo
QSysInfo 类提供了系统相关的信息,包括操作系统版本、主机名称等。
获取系统相关的信息
示例:
cpp
#include <QCoreApplication>
#include <QSysInfo>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
qDebug() << "Operating System:" << QSysInfo::currentCpuArchitecture();
qDebug() << "OS Version:" << QSysInfo::productVersion();
qDebug() << "Host Name:" << QSysInfo::machineHostName();
qDebug() << "Product Type:" << QSysInfo::productType();
return a.exec();
}
运行结果:
plain
Operating System: "x86_64"
OS Version: "10"
Host Name: "DESKTOP-Q0OJMLO"
Product Type: "windows"
QStandardPaths
获取用户信息
示例:通过 QStandardPaths 可以获取用户的家目录和其他相关路径。
cpp
#include <QCoreApplication>
#include <QStandardPaths>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString homeDir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
qDebug() << "Home Directory:" << homeDir;
return a.exec();
}
运行结果:
plain
Home Directory: "C:/Users/xxxcat"
QHostInfo
QHostInfo 是 Qt 中用于处理网络主机信息的类。它可以获取主机名及其相关的地址信息,常用于网络编程时与主机连接和解析相关的操作。
QHostInfo 类的一些主要特性和常用方法:
| 方法 | 描述 |
|---|---|
| static QHostInfo fromName(const QString &name) | 根据主机名解析并获取 QHostInfo 对象。 |
| static QHostInfo fromAddress(const QHostAddress &address) | 根据 IP 地址获取 QHostInfo 对象。 |
| QString hostName() const | 返回主机的名称。 |
| QStringList aliases() const | 返回与该主机关联的别名列表。 |
| QList addresses() const | 返回与该主机关联的所有 IP 地址的列表。 |
| bool isNull() const | 检查 QHostInfo 对象是否有效(是否为空)。 |
| QList addresses() (公共函数) | 获取与该主机关联的所有 IP 地址列表。此函数可能是重复的,可能是表格填写时的疏忽。 |
| HostInfoError error() (公共函数) | 获取解析主机信息时发生的错误类型。表格中没有详细描述此函数的返回值和用途,可能需要根据实际代码进行补充。 |
| QString errorString() (公共函数) | 获取解析主机信息时发生的错误字符串描述。同样,可能需要根据实际代码补充更详细的描述。 |
| void abortHostLookup(int id) (静态函数) | 中止特定的主机查找操作。需要传入一个标识符 id。 |
| QString localDomainName() (静态函数) | 获取本地计算机所在的域名。 |
| QString localHostName (静态函数,可能带有错误) | 获取本地计算机的主机名。这里的描述可能需要修正或补充完整的信息。 |
| int lookupHost(QString &name, QObject* receiver, char *member) (静态函数) | 根据主机名进行查找,并将结果发送到指定的 QObject 对象的指定成员函数中。需要提供主机名、接收对象和成员函数的指针。 |
获取特定主机的信息
示例:如何使用 QHostInfo 来获取特定主机的信息。
cpp
#include <QCoreApplication>
#include <QHostInfo>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString hostName = "www.example.com"; // 替换为你想查询的主机名
QHostInfo hostInfo = QHostInfo::fromName(hostName); // 从主机名获取主机信息
if (hostInfo.error() == QHostInfo::NoError) { // 检查是否有错误
qDebug() << "Host Name:" << hostInfo.hostName();
qDebug() << "IP Addresses:" << hostInfo.addresses();
} else {
qDebug() << "Failed to retrieve host information:" << hostInfo.errorString();
}
return 0; // 不需要调用 a.exec(),因为这是一个控制台应用程序,不需要事件循环
}
应用场景
- DNS 查询:用来解析主机名,获取其 IP 地址。
- 网络通信:在客户端与服务器之间建立连接时,获取服务器信息。
- 调试:有助于在调试和测试网络应用程序时获取详细的主机信息。
运行结果:
plain
Host Name: "www.example.com"
IP Addresses: QList(QHostAddress("23.208.31.39"), QHostAddress("23.208.31.49"))
QNetworkInterface
QNetworkInterface 是 Qt 中用于处理网络接口信息的类。
- 提供了有关本机网络接口的信息,例如 IP 地址、MAC 地址、接口名称等。
- 常用于网络编程,帮助开发者获取和管理各种网络接口的详细信息。
QNetworkInterface 类的一些主要特性和常用方法:
| 方法 | 描述 |
|---|---|
| static QList allInterfaces() | 返回系统中所有网络接口的列表。 |
| QString name() const | 返回网络接口的名称。 |
| QString hardwareAddress() const | 返回网络接口的 MAC 地址。 |
| QList addressEntries() const | 返回该接口上配置的所有地址条目的列表。 |
| bool isLoopBack() const | 检查接口是否是回环接口(如 localhost)。 |
| bool supportsIPv4() const | 检查接口是否支持 IPv4 地址。 |
| bool supportsIPv6() const | 检查接口是否支持 IPv6 地址。 |
获取网络信息
示例:使用 QNetworkInterface 获取网络相关的信息,如IP地址、MAC地址等
cpp
#include <QCoreApplication>
#include <QNetworkInterface>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
for (const QNetworkInterface &interface : interfaces) {
qDebug() << "Interface Name:" << interface.name();
qDebug() << "IP Addresses:" << interface.addressEntries();
qDebug() << "MAC Address:" << interface.hardwareAddress();
}
return a.exec();
}
运行结果:
plain
Interface Name: "iftype53_32768"
IP Addresses: QList(address = QHostAddress("fe80::d7c4:880:5767:d260%iftype53_32768"), netmask = QHostAddress("ffff:ffff:ffff:ffff::"), address = QHostAddress("169.254.250.73"), netmask = QHostAddress("255.255.0.0"), broadcast = QHostAddress("169.254.255.255"))
MAC Address: "00:FF:B3:18:7B:0F"
获取本机的网络接口信息
示例:
以下是一个简单的示例,展示如何使用 QNetworkInterface 获取本机的网络接口信息:
cpp
#include <QCoreApplication>
#include <QNetworkInterface>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
// 获取所有网络接口
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
for (const QNetworkInterface &interface : interfaces) {
qDebug() << "Interface Name:" << interface.name();
qDebug() << "MAC Address:" << interface.hardwareAddress();
// 获取地址条目
QList<QNetworkAddressEntry> entries = interface.addressEntries();
for (const QNetworkAddressEntry &entry : entries) {
qDebug() << "IP Address:" << entry.ip().toString();
}
qDebug() << "--------------------------------";
}
return 0; // 不需要调用 a.exec(),因为这是一个控制台应用程序,不需要事件循环
}
应用场景
- 网络监控:获取当前系统的网络外设信息。
- 网络配置:用于检查和配置网络设置。
- 调试:在开发网络应用程序时,获取接口信息以便更好地进行测试和调试。
运行结果:
plain
Interface Name: "
MAC Address: "
IP Address: "
IP Address: "
TCP通信
QTcpSocket
QTcpSocket
用途:实现TCP客户端。
功能:提供在网络上读取和写入数据的能力。
QTcpServer
QTcpServer 是 Qt 中用于实现 TCP 服务器的类。
- 提供了一个简单的接口,用于监听并接受来自客户端的 TCP 连接。
- 可以使用 QTcpServer 类来创建网络服务,比如聊天应用、文件传输服务等。
QTcpServer 的主要特性和常用方法:
| 方法 | 描述 |
|---|---|
| bool listen(const QHostAddress &address, quint16 port) | 在指定的地址和端口上开始监听。 |
| void close() | 关闭服务器并停止监听。 |
| QHostAddress serverAddress() const | 返回服务器的 IP 地址。 |
| quint16 serverPort() const | 返回服务器的端口号。 |
| void setMaxPendingConnections(int numConnections) | 设置最大等待连接数。 |
| void newConnection() | 当有新的连接到达时发出此信号。 |
信号:void newConnection() :当有新的客户端连接到来时发出此信号。
创建一个基本的 TCP 服务器
示例:
cpp
#include <QTcpServer>
#include <QTcpSocket>
#include <QCoreApplication>
#include <QDebug>
class TcpServer : public QTcpServer {
Q_OBJECT
public:
TcpServer() {
connect(this, &QTcpServer::newConnection, this, &TcpServer::handleNewConnection);
}
private slots:
void handleNewConnection() {
QTcpSocket *clientSocket = nextPendingConnection();
qDebug() << "New client connected:" << clientSocket->peerAddress().toString();
connect(clientSocket, &QTcpSocket::readyRead, this, [clientSocket]() {
QByteArray data = clientSocket->readAll();
qDebug() << "Received:" << data;
// Echo back the data
clientSocket->write(data);
});
connect(clientSocket, &QTcpSocket::disconnected, clientSocket, &QTcpSocket::deleteLater);
}
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
TcpServer server;
if (server.listen(QHostAddress::Any, 1234)) {
qDebug() << "Server is listening on port" << server.serverPort();
} else {
qDebug() << "Server could not start!";
return 1;
}
return a.exec();
}
#include "main.moc"
使用步骤
- 创建服务器:实例化 QTcpServer 对象。
- 监听端口:调用 listen() 方法,指定要监听的 IP 地址和端口。
- 处理连接:连接 newConnection() 信号到处理函数,当有新连接时接受客户端连接并处理数据。
应用场景
- 聊天应用:用于处理多个客户端的聊天消息。
- 文件服务:实现文件上传和下载服务。
- 实时数据传输:如传感器数据的实时发送和接收。
运行结果:
plain
Server is listening on port 1234
UDP通信
QUdpSocket
QUdpSocket 是 Qt 中用于实现 UDP(用户数据报协议)通信的类。与 TCP 不同,UDP 是一种无连接的协议,适用于快速传输数据而不需要建立和维护连接。
特性和方法
以下是 QUdpSocket 类的一些主要特性和常用方法:
| 方法 | 描述 |
|---|---|
| bool bind(quint16 port, const QHostAddress &address = QHostAddress::Any, QuicSocketOptions options = 0) | 在指定的端口和地址上绑定 Socket。 |
| qint64 writeDatagram(const QByteArray &data, const QHostAddress &host, quint16 port) | 发送数据报文到指定的地址和端口。 |
| qint64 readDatagram(QByteArray &data, QHostAddress *host = nullptr, quint16 *port = nullptr) | 从 Socket 接收数据报文。 |
| void close() | 关闭 Socket。 |
| bool hasPendingDatagrams() const | 检查是否有待处理的数据报文。 |
信号处理
- void readyRead() :当有数据报文可读时发出此信号。
- void errorOccurred(QAbstractSocket::SocketError socketError) :发生错误时发出此信号。
创建一个基本的 UDP 客户端和服务器
示例:
以下是一个简单的示例,展示如何使用 QUdpSocket 创建一个基本的 UDP 客户端和服务器:
cpp
#include <QCoreApplication>
#include <QUdpSocket>
#include <QDebug>
class UdpServer : public QObject {
Q_OBJECT
public:
UdpServer() {
udpSocket = new QUdpSocket(this);
udpSocket->bind(1234);
connect(udpSocket, &QUdpSocket::readyRead, this, &UdpServer::processPendingDatagrams);
qDebug() << "UDP server is listening on port 1234";
}
private slots:
void processPendingDatagrams() {
while (udpSocket->hasPendingDatagrams()) {
QByteArray buffer;
QHostAddress sender;
quint16 senderPort;
buffer.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);
qDebug() << "Received datagram from:" << sender.toString() << ":" << senderPort;
qDebug() << "Message:" << buffer;
}
}
private:
QUdpSocket *udpSocket;
};
class UdpClient : public QObject {
Q_OBJECT
public:
UdpClient() {
udpSocket = new QUdpSocket(this);
QByteArray message = "Hello UDP Server!";
udpSocket->writeDatagram(message, QHostAddress::LocalHost, 1234);
qDebug() << "Sent datagram:" << message;
}
private:
QUdpSocket *udpSocket;
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
UdpServer server;
UdpClient client;
return a.exec();
}
#include "main.moc"
使用步骤
- 创建 Socket:实例化 QUdpSocket 对象来创建 UDP Socket。
- 绑定端口:使用 bind() 方法在指定端口上绑定 Socket。
- 发送数据:使用 writeDatagram() 发送数据。
- 接收数据:连接 readyRead() 信号处理接收到的数据。
应用场景
- 实时通信:如游戏、视频会议等需要低延迟的场景。
- 广播和组播:发送数据到多个接收方。
- 传感器数据:收集和传输传感器数据。
运行结果:
plain
UDP server is listening on port 1234
Sent datagram: "Hello UDP Server!"
Received datagram from: "::ffff:127.0.0.1" : 51741
Message: "Hello UDP Server!"
UDP组播
在 Qt 中,UDP 组播是一种用于向多个接收者同时发送数据的网络通信方式。使用 QUdpSocket 类,可以轻松实现 UDP 组播功能。组播是通过特定的 IP 地址(通常在范围 224.0.0.0 至 239.255.255.255 内的地址)来实现的。
组播的基本概念
- 组播地址:使用特定的组播 IP 地址,可以将数据发送到一组接收方。
- 加入组播组:接收方需要加入组播组,以接收到发送的数据。
- 实时应用:组播常用于流媒体、在线游戏和实时数据传输。
使用 QUdpSocket 实现组播
以下是使用 QUdpSocket 实现 UDP 组播的基本步骤和示例:。
步骤
- 创建 QUdpSocket 实例:用于发送和接收数据。
- 绑定端口:接收方需要绑定到特定的端口。
- 加入组播组:接收方使用 QUdpSocket::joinMulticastGroup() 方法加入组播地址。
- 发送数据:发送方使用 QUdpSocket::writeDatagram() 方法发送到组播地址。
- 接收数据:接收方使用 readyRead() 信号处理接收到的数据。
示例:一个简单的组播服务器和客户端。
组播服务器
cpp
#include <QCoreApplication>
#include <QUdpSocket>
#include <QHostAddress>
#include <QTimer>
#include <QDebug>
class MulticastServer : public QObject {
Q_OBJECT
public:
MulticastServer() {
udpSocket = new QUdpSocket(this);
QHostAddress groupAddress("224.0.0.1");
quint16 port = 1234;
// 定时发送数据
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, [this, groupAddress, port]() {
QByteArray message = "Hello Multicast!";
udpSocket->writeDatagram(message, groupAddress, port);
qDebug() << "Sent:" << message;
});
timer->start(1000); // 每秒发送一次
}
private:
QUdpSocket *udpSocket;
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
MulticastServer server;
return a.exec();
}
#include "main.moc"
运行结果:
plain
Sent: "Hello Multicast!"
Sent: "Hello Multicast!"
Sent: "Hello Multicast!"
Sent: "Hello Multicast!"
Sent: "Hello Multicast!"
Sent: "Hello Multicast!"
组播客户端
cpp
#include <QCoreApplication>
#include <QUdpSocket>
#include <QHostAddress>
#include <QDebug>
class MulticastClient : public QObject {
Q_OBJECT
public:
MulticastClient() {
udpSocket = new QUdpSocket(this);
QHostAddress groupAddress("224.0.0.1");
quint16 port = 1234;
// 绑定端口并加入组播组
udpSocket->bind(port);
udpSocket->joinMulticastGroup(groupAddress);
connect(udpSocket, &QUdpSocket::readyRead, this, &MulticastClient::processPendingDatagrams);
qDebug() << "Joined multicast group:" << groupAddress.toString();
}
private slots:
void processPendingDatagrams() {
while (udpSocket->hasPendingDatagrams()) {
QByteArray buffer;
QHostAddress sender;
quint16 senderPort;
buffer.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);
qDebug() << "Received:" << buffer << "from:" << sender.toString() << ":" << senderPort;
}
}
private:
QUdpSocket *udpSocket;
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
MulticastClient client;
return a.exec();
}
#include "main.moc"
总结
- 组播服务器 向特定的组播地址发送数据,所有加入该组播组的客户端都能接收到。
- 组播客户端 加入组播组并接收数据,处理通过信号与槽机制实现。
使用 UDP 组播,可以高效地管理大规模的数据分发,适用于实时多媒体应用、在线游戏等场景。
运行结果:
plain
QAbstractSocket: cannot bind to QHostAddress::Any (or an IPv6 address) and join an IPv4 multicast group; bind to QHostAddress::AnyIPv4 instead if you want to do this
Joined multicast group: "224.0.0.1"
HTTP网络应用
QNetworkRequest
QNetworkRequest 是 Qt 网络模块中用于封装 HTTP 请求参数的类。它主要在使用 QNetworkAccessManager 发送网络请求时,与之配合使用。在请求中, QNetworkRequest 可以包含 URL、HTTP 方法、Headers、请求体等信息。
主要功能和特性
- 设置 URL:定义请求的目标地址。
- 指定 HTTP 方法:如 GET、POST、PUT、DELETE 等。
- 添加请求头:使用 setRawHeader() 方法可设置自定义 HTTP 头部信息。
- 设置请求的内容类型:如 JSON 或 XML,通过 setHeader() 方法设置 Content-Type 。
- 支持 SSL:可以配置 SSL 相关的属性。
- 超时设置:通过 QNetworkAccessManager 设置请求的超时。
QNetworkAccessManager
QNetworkAccessManager 是 Qt 网络模块中的一个核心类,用于处理网络请求。它提供了发送和接收数据的功能,支持 HTTP、HTTPS 和 FTP 协议,允许开发者在 Qt 应用程序中轻松进行网络通信。
主要功能和特性
- 发送请求:支持 GET、POST、PUT、DELETE 等 HTTP 方法。
- 管理请求和响应:处理网络请求的发送和接收,包括对响应的解析。
- 异步操作:所有网络操作都是异步的,避免阻塞用户界面。
- SSL 支持:提供 SSL/TLS 加密通信的支持。
- 支持身份验证:可以处理不同的身份验证机制。
- 处理缓存:可以与 Qt 的网络缓存系统配合使用。
发送一个简单的 GET 请求
示例:
cpp
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QDebug>
#include <QObject>
class NetworkManager : public QObject {
Q_OBJECT
public:
NetworkManager() {
manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished, this, &NetworkManager::onFinished);
// 发起 GET 请求
QUrl url("https://jsonplaceholder.typicode.com/todos/1");
QNetworkRequest request(url);
// 发送请求
manager->get(request);
}
private slots:
void onFinished(QNetworkReply *reply) {
if (reply->error() == QNetworkReply::NoError) {
qDebug() << "Response:" << reply->readAll();
} else {
qDebug() << "Error:" << reply->errorString();
}
reply->deleteLater();
}
private:
QNetworkAccessManager *manager;
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
NetworkManager networkManager;
return a.exec();
}
#include "main.moc"
说明
- 创建 QNetworkAccessManager 实例:负责处理所有的网络请求。
- 发送请求:通过 get() , post() , put() , 等方法进行不同类型的请求。
- 信号和槽机制:使用 finished 信号来处理请求的响应。
- 接收响应:在 onFinished 槽中,检查请求是否成功并处理响应。
常见用法
- GET 请求:用于请求数据,例如获取网页内容。
- POST 请求:用于发送数据,常用于表单提交。
- 上传和下载文件:使用 put() 或者 get() 方法,可以进行文件的上传和下载操作。
处理 SSL:若需要使用 SSL,可以通过 QNetworkRequest 配置请求,并在 QNetworkAccessManager 中设置相关的 SSL 选项。
运行结果:
plain
Response: "{\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"delectus aut autem\",\n \"completed\": false\n}"
QNetworkReply
QNetworkReply 是 Qt 网络模块中用于表示网络请求的响应。它保存了从服务器收到的数据,并提供了访问这些数据的功能。通常与 QNetworkAccessManager 一起使用,在发送请求后, QNetworkReply 将接收并提供响应内容。
主要功能和特性
- 数据访问:提供读取服务器响应的多种方法,包括文本和二进制数据。
- 状态管理:可以查询请求的状态,确保应用能够处理成功和失败的场景。
- 错误处理:提供错误信息,方便开发者处理网络问题。
- 元数据:能够获取有关HTTP响应的元数据,如状态码、头信息等。
- 异步操作:与 QNetworkAccessManager 的信号槽机制一起工作,支持非阻塞操作。
主要方法
- readAll() :获取响应的全部数据。
- error() :获取当前请求的错误状态。
- errorString() :返回错误的描述信息。
- attribute() :获取请求的某些属性(如 SSL 错误)。
- header() :获取响应头信息。
- url() :获取请求的 URL。
使用 QNetworkReply 处理一个简单的 GET 请求的响应。
示例:
cpp
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QDebug>
#include <QObject>
class NetworkManager : public QObject {
Q_OBJECT
public:
NetworkManager() {
manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished, this, &NetworkManager::onFinished);
// 设置请求 URL
QUrl url("https://jsonplaceholder.typicode.com/todos/1");
QNetworkRequest request(url);
// 发送 GET 请求
manager->get(request);
}
private slots:
void onFinished(QNetworkReply *reply) {
if (reply->error() == QNetworkReply::NoError) {
// 读取响应内容
QByteArray responseData = reply->readAll();
qDebug() << "Response:" << responseData;
} else {
// 处理错误
qDebug() << "Error:" << reply->errorString();
}
reply->deleteLater();
}
private:
QNetworkAccessManager *manager;
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
NetworkManager networkManager;
return a.exec();
}
#include "main.moc"
说明
- 接收响应:通过 onFinished 槽函数处理 QNetworkReply 的响应。
- 读取数据:使用 readAll() 方法获取服务器的响应数据。
- 检查错误:通过 error() 方法检查请求是否成功,并使用 errorString() 获取详细信息。
常见用法
- 获取响应内容:使用 readAll() 或者其他数据读取方法获取服务器返回的数据。
- 检查状态码和头信息:使用 HTTP 状态码和头信息作出相应的处理。
- 处理 SSL 相关信息:获得 SSL 连接的状态和错误信息。
运行结果:
plain
Response: "{\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"delectus aut autem\",\n \"completed\": false\n}"