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
的值来测试。
相关文章
|
7天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
8月前
|
数据可视化 算法 数据库
GUI、多线程编程、网络编程简介
GUI 是 Graphical User Interface 的缩写,含义为图形用户界面。它是一种计算机操作界面,通过图形、图标和视觉化元素与用户进行交互。相比于命令行界面(CLI),GUI 提供了更直观、更易用的方式让用户与计算机系统进行交互。
91 0
|
4月前
|
API
[QT5] QT5基本知识
[QT5] QT5基本知识
36 0
|
8月前
|
网络协议
十四 网络编程
十四 网络编程
33 0
|
数据安全/隐私保护
|
存储 网络协议 网络安全
Qt之网络编程
简述 Qt Network模块提供的类允许编写 TCP/IP clients 和 servers。 其中包含一些低级别的类,例如:QTcpSocket、QTcpServer 和 QUdpSocket,表示低级的网络概念;一些高级别的类,例如:QNetworkRequest、QNetworkReply 和 QNetworkAccessManager,使用常见的协议执行网络操
2485 0
|
网络协议
5.关于QT中的网络编程,QTcpSocket,QUdpSocket
 1 新建一个项目:TCPServer.pro A  修改TCPServer.pro,注意:如果是想使用网络库,需要加上network SOURCES += \     TcpServer.cpp \     TcpClient.cpp   HEADERS += \     TcpServer.h
2193 0
|
网络协议 存储
Qt网络编程之二
使用QUdpSocket进行UDP编程        UDP(用户数据报协议)是一个轻量级的,不可靠的,面向数据报的,无连接协议。
973 0

推荐镜像

更多