【翻译】Qt网络编程概述

一、描述

Qt Network 模块提供编写 TCP/IP 客户端和服务端的类。此模块提供的类分成三种类型:

  • 代表低级网络概念的低级类(如 QTcpSocketQTcpServer QUdpSocket
  • 高级类(如 QNetworkRequestQNetworkReply QNetworkAccessManager
  • 实现承载管理的类,如 QNetworkConfigurationQNetworkConfigurationManagerQNetworkSession

二、Qt网络类列表

三、HTTP 和 FTP 的高级网络操作

1、Qt网络模块提供了网络访问 API,该API包含一组用于执行常见网络操作的类。

2、网络请求由 QNetworkRequest 类表示,该类还充当与请求相关联的信息的通用容器,例如任何标头信息和使用的加密。构造请求对象时指定的 URL 决定用于请求的协议。目前支持 HTTP、FTP 和本地文件 URL 上传和下载。

3、网络操作的协调由 QNetworkAccessManager 类执行。创建请求后,该类用于调度它并发出信号以报告其进度。QNetworkAccessManager 还协调使用 cookie 来存储客户端上的数据、身份验证请求和代理的使用。

4、对网络请求的回复由 QNetworkReply 类表示。QNetworkReply 提供的信号可用于单独监控每个回复。由于 QNetworkReply 是 QIODevice 的子类,因此可以同步或异步处理回复。即,作为阻塞或非阻塞操作。

四、在 QTcpSocket 和 QTcpServer 中使用 TCP

TCP(传输控制协议)是大多数 Internet 协议(包括 HTTP 和 FTP)用于数据传输的低级网络协议。 它是一种可靠的、面向流的、面向连接的传输协议。 它特别适用于数据的连续传输。

4.1、 QTcpSocket简介

1、QTcpSocket 类提供了一个TCP 接口。可以使用 QTcpSocket 来实现 POP3、SMTP 和 NNTP 等标准网络协议,以及自定义协议。

2、必须先建立到远程主机和端口的 TCP 连接,然后才能开始任何数据传输。关闭连接后数据传输将立即停止。

3、QTcpSocket 异步工作并发出信号来报告状态变化和错误。它依靠事件循环来检测传入数据并自动刷新传出数据。

4、由于 QTcpSocket 继承了 QIODevice,因此可以将其与 QTextStream QDataStream 一起使用。

5、虽然QTcpSocket 的大部分功能都是异步工作的,但也可以同步使用(即阻塞)。要获得阻塞行为,请调用 QTcpSocket 的 waitFor...() 函数。同步socket通常会导致代码具有更简单的控制流。 waitFor...() 方法的主要缺点是当 waitFor...() 函数阻塞时不会处理事件。如果在 GUI 线程中使用,这可能会冻结应用程序的用户界面。因此,建议仅在非 GUI 线程中使用同步socket。同步使用时,QTcpSocket 不需要事件循环。

4.2、QTcpServer

如果需要处理传入的 TCP 连接(例如,在服务器应用程序中),请使用 QTcpServer 类。

五、使用 UDP 和 QUdpSocket

UDP(用户数据报协议)是一种轻量级、不可靠、面向数据报的无连接协议。 当可靠性不重要时可以使用它。

1、QUdpSocket 类可以发送和接收 UDP 数据报。它继承了 QAbstractSocket,因此共享了 QTcpSocket 的大部分接口。主要区别在于 QUdpSocket 将数据作为数据报传输,而不是作为连续数据流传输。简而言之,数据报是一个大小有限(通常小于 512 字节)的数据包,除了传输的数据外,还包含数据报发送方和接收方的 IP 地址和端口。

2、QUdpSocket 支持 IPv4 广播。一台主机向所有其他主机接收的网络广播数据报。收到请求的每个主机然后将回复发送回发送者。要广播数据报,只需将其发送到特殊地址QHostAddress::Broadcast (255.255.255.255) 或本地网络的广播地址。

六、使用 QHostInfo 解析主机名

在建立网络连接之前,QTcpSocket 和 QUdpSocket 执行名称查找,将要连接的主机名转换为 IP 地址。此操作通常使用 DNS(域名服务)协议执行。

QHostInfo 提供了静态函数lookupHost()、fromName(),可以执行这样的查找。lookupHost()的查找是在一个单独的线程中完成的,利用操作系统自己的方法来执行名称查找。fromName()则是名称查找与调用者在同一线程中执行。

七、支持网络代理

Qt 的网络通信可以通过代理执行,代理可以引导或过滤本地和远程连接之间的网络流量。各个代理由 QNetworkProxy 类表示,该类用于描述和配置与代理的连接。

可以在每个socket的基础上或为应用程序中的所有网络通信启用代理。通过在连接之前调用其 QAbstractSocket::setProxy() 函数,可以使新打开的socket使用代理。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值