Qt学习笔记之网络和连接

Qt提供用于高级和低级网络通信的类,用于Web集成的类以及用于进程间通信的类。

对于高级网络流量,Qt Network在使用的操作上提供了一个抽象层,仅显示高级类和功能。Qt Network还可以处理较低级别的协议,例如TCP和UDP。QTcpSocket和QUdpSocket之类的类使开发人员可以使用TCP或UDP协议发送和接收消息。名称解析由QHostInfo完成。在使用QTcpSocket或QUdpSocket创建网络连接之前,将调用QHostInfo。通过代理过滤和重新分配网络流量可以由QNetWorkProxy类处理。

Qt Network还提供了Bearer Management API。它具有可以启动或停止网络接口以及在接入点之间漫游的功能。但是,它不会自行处理网络配置。该平台需要注意这一点。

Qt WebEngine提供了基于Chromium的Web引擎,可在您的应用程序中使用Web内容。Qt WebEngine可以呈现HTML5,XHTML和SVG文档,并执行Javascript。

Qt还提供了进程间通信(IPC)的功能。QProcess类用于启动外部程序。Qt D-Bus提供对D-Bus的支持,D-Bus是一种进程间通信和远程过程调用机制。它主要通过称为总线的中央服务器应用程序进行通信。但是,也可以让应用程序直接相互通信。QSharedMemory通过多个线程和进程提供对共享内存段的访问。但是,单个进程也可以排他地锁定该共享内存。

网络通讯

Qt支持广泛的网络通信,重点是HTTP,TCP和UDP。

在HTTP级别,Qt Network模块提供了网络访问API,主要由QNetworkRequest,QNetworkAccessManager和QNetworkReply组成。简而言之,QNetworkRequest类似于一个HTTP请求,该请求被传递给QNetworkAccessManager以在线发送请求。此类返回一个QNetworkReply,它可以解析HTTP答复。网络访问API在内部使用下面提到的套接字类(用于TCP和SSL)。

对于套接字级别的通信,应使用QTcpSocket,QUdpSocket和QSslSocket。这些类通过waitFor *方法提供了一个同步API以及一个异步API。如果可能的话(例如,事件循环正在运行),应始终首选异步API。Qt还提供了QTcpServer来启用TCP通信的服务器端部分。请注意,Qt中没有HTTP服务器类。

为了通过SSL进行安全通信,Qt Network除了中央QSslSocket外还提供了广泛的类,例如QSslCertificate,QSslConfiguration和QSslError。Qt中唯一受支持的SSL后端是OpenSSL,需要单独安装。

对于移动设备,Qt Network提供了承载管理 API来跟踪连接状态(例如,获得有关联机/脱机状态或是否使用Wifi或3G的通知)。

Qt还通过通过XmlHttpRequest显式使用HTTP 或在例如图像源中透明地使用HTTP URL在QML中提供HTTP支持。

相关话题:

  • Qt Network-模块文档
    • 网络编程API
    • 用Qt进行网络编程
    • Qt Network C ++类
    • 安全套接字层(SSL)类
    • 承载管理
  • 资源加载和网络透明度 -QML中的网络和URL透明度

Web套接字

直接TCP或HTTP通信的替代方法是使用WebSocket协议(RFC 6455)。它是TCP协议之上的双向通信协议,可以利用现有的Web基础结构,而不必创建其他基于客户端-服务器的通信。所述的Qt的WebSockets模块既提供了QML和C ++ API,除了几个实施例来说明它的用法。

万维网支持

使用Qt WebEngine布局引擎的功能,Qt可以轻松地将Web内容嵌入到Qt应用程序中。Qt WebEngine模块为Qt提供了对广泛的标准Web技术的支持,这些技术可以将用CSS样式化并用JavaScript脚本化的HTML内容嵌入到Qt应用程序中。Qt WebEngine促进了与传统的基于QWidget的桌面应用程序的集成以及嵌入到Qt Quick QML应用程序中。

有关更多信息,请参见集成Web内容。

进程间通讯

Qt提供了几种在Qt应用程序中实现进程间通信(IPC)的方式。

跨平台的Qt网络模块提供了使网络编程可移植且容易的类。它提供了使用特定应用程序级别协议进行通信的高层类(例如QNetworkAccessManager,QFtp),以及提供了用于实现协议的较低层的类(例如QTcpSocket,QTcpServer,QSslSocket)。

跨平台共享内存类QSharedMemory可以访问操作系统的共享内存实现。它允许通过多个线程和进程安全地访问共享内存段。此外,QSystemSemaphore可用于控制对系统共享资源的访问,以及在进程之间进行通信。

在Qt的d-总线模块是一个跨平台的库中,可以使用通过d-Bus协议来实现IPC。它将Qt的信号和插槽机制扩展到IPC级别,从而允许一个进程发出的信号连接到另一进程的插槽。

跨平台类QProcess可用于将外部程序作为子进程启动,并与它们进行通信。它提供了一个用于监视和控制子进程状态的API。QProcess通过继承QIODevice来访问子进程的输入/输出通道。

该QLocalSocket类提供了一个当地的插座。在Windows上,这是一个命名管道,在Unix上,这是一个本地域套接字。该QLocalServer类提供了一个本地套接字基于服务器。此类可以接受传入的本地套接字连接。

相关话题:

  • Qt D-Bus-模块文档
    • 使用Qt D-Bus适配器
    • 在D-Bus适配器中声明信号
    • 在D-Bus适配器中声明插槽
    • Qt D-Bus类型系统
    • Qt D-Bus XML编译器(qdbusxml2cpp)
  • QLocalSocket
  • QSharedMemory

串口通讯

在Qt的串行端口模块提供了一个C ++ API,用于通过串行端口进行通信,使用RS-232标准。它与物理端口以及模拟这些端口的驱动程序一起使用。串行端口仿真器的示例包括虚拟COM端口,com0com仿真器和Bluetooth SPP。

该模块旨在使串行端口编程更加轻松和可移植。从Qt 5.2开始,Windows,macOS和Linux都支持它。

相关话题:

  • Qt串行端口 -模块文档
  • Qt串行端口C ++类

蓝牙通讯

在Qt的蓝牙模块提供C ++和QML的API短程(小于100米)由开发的无线协议蓝牙特殊兴趣组。它提供了经典的蓝牙和低功耗蓝牙功能。

相关话题:

  • Qt蓝牙 -模块文档
    • 蓝牙经典
    • 低功耗蓝牙
    • Qt蓝牙C ++类
    • Qt蓝牙QML类型

近场通讯

在Qt的NFC模块提供C ++和QML的API为极短距离(小于20厘米)通过开发的无线协议NFC论坛。

相关话题:

  • Qt NFC-模块文档
    • Qt NFC概述
    • Qt NFC C ++类
    • Qt NFC QML类型

你可能感兴趣的:(#,Qt学习之路)