Qt网络编程之二

简介: 使用QUdpSocket进行UDP编程       UDP(用户数据报协议)是一个轻量级的,不可靠的,面向数据报的,无连接协议。
使用QUdpSocket进行UDP编程


       UDP(用户数据报协议)是一个轻量级的,不可靠的,面向数据报的,无连接协议。当可靠性不是很重要的时候就可以使用该协议。例如:一个用于报告时间的服务器可以使用UDP。如果包含时间的数据报丢失了,那么客户端只需发出另外一个请求。
       QUdpSocket类允许你发送和接收UDP数据报。它继承自QAbstractSocket,因此它有共享了QTcpSocket的大多数接口。最主要的不同就是QUdpSocket以数据报的形式发送数据,而不像QTcpSocket使用连续的数据流。简言之,一个数据报就是一个有大小限制数据包(通常小于512bytes),包含发送方的IP地址和端口号、接收方的IP地址和端口号以及要传输的数据。
       QUdpSocket支持IPv4广播。广播通常是用于实现网络发现协议,例如寻找网络上拥有最大空余磁盘空间的主机。一个主机发出的数据报,网络上的其它主机都可以接收到。每一个主机都接收到一个请求,然后返回一个应答信息给发送者,表明当前可用磁盘空间。发广播的主机直到接收到所有其它主机的应答信息才从中选择可用磁盘空间最大的主机来存储数据。要广播一个数据报,仅仅只需要将该数据报发送给特殊的地址:QHostAddress::Broadcast (255.255.255.255),或者是你本地网络的广播地址。
       QUdpSocket::bind()创建用于接收进入的数据报,这个和TCP服务器的 QTcpServer::listen()十分相似。无论什么时候当一个或者多个数据报到达时,QUdpSocket就会发送readyRead()信号。调用QUdpSocket::readDatagram()来读取数据报。
       Broadcast Sender 和 Broadcast Receiver示例展示了如何使用Qt编写UDP发送者和UDP接收者。

       QUdpSocket同样支持多播。Multicast Sender 和 Multicast Receiver示例展示了如何编写UDP多播客户端。



使用QHostInfo解析主机名称
       在建立网络连接之前,QTcpSocket和QUdpSocket进行一个名称查询,将你连接的主机的名称翻译为一个IP地址。这个操作通常都是使用DNS(域名服务)协议。
       QHostInfo提供了一个静态的方法,使得你可以自己完成这个查询操作。提供使用一个主机名、一个QObject指针和一个槽函数作为参数调用QHostInfo::lookupHost(),QHostInfo将会执行名称查询,并且在查询结束的时候调用已经指定的槽函数。实际的查询操作将会在一个单独的线程中完成,利用操作系统自己的方法进行名称查询操作。
       QHostInfo也提供了一个称为QHostInfo::fromName()的静态方法,该方法将主机名作为参数和返回的结果。在这种情况下,查询操作与函数调用者在一个线程中完成。这个重载对于非GUI应用或将查询操作放在一个单独的,非GUI的线程中是十分有用的。(在一个GUI线程中调用这个函数可能会在它执行查询操作的时候导致你的UI冻结。)


支持网络代理
       使用Qt进行网络通信可以通过代理完成,也就是在本地和远程的连接中指向或者过滤网络路径。
       单个的代理是由QNetworkProxy类呈现的,该类用来描述和配置到代理的接连。不同层次的网络通信代理类型都得到了支持,由于SOCKS 5的支持,使得允许在一个低层次的网络流量使用代理,HTTP和FTP代理工作在协议层次。查看QNetworkProxy::ProxyType获取更多的信息。
       代理可以在一个应用程序的单个套接字或者全部网络通信上使能。一个新打开的套接字在它被连接之前可以通过调用QAbstractSocket::setProxy()函数来使用代理。应用程序范围的代理可以通过调用QNetworkProxy::setApplicationProxy()函数对所有的套接字连接使能的。
       代理工厂主要用于创建代理使用的策略。QNetworkProxyFactory是通过基于查询具体代理类型来支持代理的。 查询本身是使用QNetworkProxyQuery对象来编码的,该对象以基于关键的标准来选择使能的代理,,例如,代理的目的(TCP,UDP连接,TCP服务器,URL请求),本地的端口,远程主机和端口,使用的协议(HTTP,FTP等)。
QNetworkProxyFactory::proxyForQuery()被用来直接的查询工厂。一个应用程序范围的代理的策略可以通过传递一个factory给QNetworkProxyFactory::setApplicationProxyFactory()来实现,并且自定义的程序级代理策略可以通过创建QNetworkProxyFactor的子类实现,查看相应的类文档获取详细信息。


Bearer Management支持
       Bearer Management控制着设备的连接状态,例如:应用程序可以启动和停止网络接口,并且在接入点之间透明的漫游。
       QNetworkConfigurationManager类管理者设备所知的一系列网络配置。一个网络配置描述了启动网络接口的参数集合,并且使用QNetworkConfiguration类代表。
       一个网络接口通过给定的网络配置打开一个QNetworkSession来完成启动。大多数情况下,基于特定平台默认的网络配置创建网络会话是合适的。默认的网络配置是函数QNetworkConfigurationManager::defaultConfiguration()返回的。
       在一些平台上,平台要求应用程序在进行任何网络操作之前打开一个网络会话。这个可以通过
QNetworkConfigurationManager::capabilities()函数返回QNetworkConfigurationManager::NetworkSessionRequired
的值来测试。
目录
相关文章
|
5月前
|
机器学习/深度学习 人工智能 并行计算
Unsloth:学生党福音!开源神器让大模型训练提速10倍:单GPU跑Llama3,5小时变30分钟
Unsloth 是一款开源的大语言模型微调工具,支持 Llama-3、Mistral、Phi-4 等主流 LLM,通过优化计算步骤和手写 GPU 内核,显著提升训练速度并减少内存使用。
605 3
Unsloth:学生党福音!开源神器让大模型训练提速10倍:单GPU跑Llama3,5小时变30分钟
|
SQL 关系型数据库 MySQL
Mysql误删,恢复数据,binlog闪回,宝塔面板
binlog是二进制日志文件,用来记录Mysql内部对数据库的改动(只记录对数据的修改操作),主要用于数据库的主从复制以及增量恢复。 当我们搭建mysql主从复制的时候,两个实例之间也是通过binlog来完成数据的备份同步。 所以有这种根据binlog得到执行sql语句、闪回sql语句,我们只需要利用根据分析binlog,然后就可以找到准确的数据改动sql,并得到闪回sql,检查无误后执行就可以恢复数据了
902 0
Mysql误删,恢复数据,binlog闪回,宝塔面板
|
存储 移动开发 前端开发
从发展历程到基础语法规则,一文读懂HTML技术!
从发展历程到基础语法规则,一文读懂HTML技术!
229 1
|
关系型数据库 数据库 开发工具
CentOS7.X安装postgresql-10.3
CentOS7.X安装postgresql-10.3
2572 0
kde
|
2天前
|
JSON Linux 数据格式
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
897 3
|
11天前
|
Java Linux Maven
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
本文详细介绍了Maven的项目管理工具特性、安装步骤和配置方法。主要内容包括: Maven概述:解释Maven作为基于POM的构建工具,具备依赖管理、构建生命周期和仓库管理等功能。 安装步骤: 从官网下载最新版本 解压到指定目录 创建本地仓库文件夹 关键配置: 修改settings.xml文件 配置阿里云和清华大学镜像仓库以加速依赖下载 设置本地仓库路径 附加说明:包含详细的配置示例和截图指导,适用于各种操作系统环境。 本文提供了完整的Maven安装和配置
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
|
5天前
|
人工智能 定位技术 API
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
317 4
|
6天前
|
数据采集 JSON API
Excel数据治理新思路:引入智能体实现自动纠错【Python+Agent】
本文介绍如何利用智能体与Python代码批量处理Excel中的脏数据,解决人工录入导致的格式混乱、逻辑错误等问题。通过构建具备数据校验、异常标记及自动修正功能的系统,将数小时的人工核查任务缩短至分钟级,大幅提升数据一致性和办公效率。