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
的值来测试。
相关文章
|
数据采集 搜索推荐 安全
智慧城市的交通管理大数据模型
智慧城市交通管理系统借助大数据模型,通过全面收集交通数据(如监控、GPS、公共交通信息等),进行数据清洗和预处理,利用Python的Pandas进行数据管理。通过ARIMA等模型分析,预测交通流量、识别交通模式,支持智能信号控制、预测性维护和事件响应。这种集成分析与决策支持系统提升城市交通效率,确保出行安全,预示着未来交通管理的智能化和个性化趋势。【6月更文挑战第23天】
1247 10
|
机器学习/深度学习 搜索推荐 大数据
大数据在医疗健康领域的革新作用
【6月更文挑战第1天】大数据在医疗健康领域展现出巨大潜力,助力疾病预测、精准诊断和个性化治疗。通过分析医疗数据,预测风险、辅助诊断,并定制治疗方案。示例代码展示了使用LogisticRegression进行疾病预测。随着技术发展,大数据将为医疗健康带来革命性进步,保障人类健康。
222 1
kde
|
15天前
|
JSON Linux 数据格式
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
9347 76
|
12天前
typora免费版,激活方法,Typora使用教程
Typora是一款简洁高效的Markdown编辑器,支持即时渲染。本教程涵盖安装方法、文件操作、视图控制、格式排版、字体样式及Markdown语法,助你快速上手使用Typora进行高效写作。
2387 6
|
5天前
|
云安全 人工智能 安全
|
18天前
|
人工智能 定位技术 API
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
2252 34
|
6天前
|
Ubuntu JavaScript Linux
Windows安装Claude Code
Claude Code 是 Anthropic 推出的代码助手,支持在 Windows 通过 WSL(Windows Subsystem for Linux)运行。本文介绍如何在 Windows 系统中启用 WSL、安装 Ubuntu 子系统、配置 Python 与 Node.js 环境,并最终安装和运行 Claude Code。内容涵盖 WSL 设置、开发工具安装、依赖配置及常见问题解决方法,助你顺利在本地环境中使用 Claude Code 提升编码效率。
592 1
Windows安装Claude Code
|
15天前
|
JavaScript Ubuntu IDE
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
1250 6