当前位置: 首页 > news >正文

【QT:网络编程】

网络编程的本质就是在编写应用层代码。需要传输层支持。而传输层的协议有UDP、TCP等

使用QT网络编程的API,需要在.pro文件中添加network模块,而QT中的控件和其他内容都是包含在QtCore模块中的(默认添加)

QT为什么要划分模块?

Qt是一个庞大的框架,当功能集中放在一块时,如果书写一个简单的程序,没有进行模块划分,那么此时生成的可执行程序就会很大,而其中包含了很多没有使用的功能,性价比太低,不如做模块化处理,按需引入所需要的模块


UDP Socket 

主要的类有:QUdpSocket、QNetworkDatagram。QUdpSocket表示一个UDP的socket文件,QNetworkDatagram表示一个UDP数据报

QUdpSocket
名称类型解释对标原生API
bind(const QHostAddress&,quint16)方法绑定指定端口bind
receiveDategram()方法返回QNetWorkDatagram,读取一个UDP数据报recvfrom
writeDatagram(const QNetworkDataGram&)方法发送一个UDP数据报sendto
readyRead信号收到数据并准备就绪后触发
QNetworkDatagram
名称类型解释对标原生API
QNetworkDatagram(const  QByteArray&,const QHostAddress&,quint16)构造函数通过QByteArray,目标IP地址,目标端口号构造一个UDP数据报,通常用于发送数据时
data()方法获取数据报中内部持有的数据,返回QByteArray
senderAddress()方法获取数据报中包含的对端IP地址recvfrom包含了该功能
senderPort()方法获取数据报中包含的对端的端口号recvfrom包含了该功能

要在QT中编写网络代码需要在.pro文件中添加network

 

端口绑定要在信号槽后面,因为绑定意味着请求可以被收到

服务器逻辑:

 

客户端逻辑:

Tcp Socket:

  •  UDP无连接,不可靠传输,面向数据报
  • TCP有链接,可靠传输,面向字节流

核心类:QTcpServer 和 QTcpSocket

QTcpServer
名称类型说明对标原生API
listen(const QHostAddress&, quint16 port)方法绑定指定的地址和端⼝号,并开始监听.Bind和listen
nextPendingConnection()方法从系统中获取到⼀个已经建⽴好的tcp连接.返回⼀个 QTcpSocket ,表⽰这个客⼾端的连接.通过一个socket对象完成和客⼾端之间的通信.accept
newConnection信号有新的客⼾端建⽴连接好之后触发

QTcpServer ⽤于监听端⼝,和获取客⼾端连接. 

QTcpSocket
名称类型解释对标原生API
readAll()方法读取当前接收缓冲区中的所有数据.返回QByteArray对象.read
write(const QByteArray&)方法把数据写⼊socket中.write
deleteLater方法暂时把socket对象标记为⽆效.Qt会在下个事件循环中析构释放该对象.
deleteLater信号有数据到达并准备就绪时触发.
disconnected信号连接断开时触发.

QTcpSocket用户客户端与服务器的数据交互 

tcp服务端回显界面代码:

tcp客户端回显代码:

HTTP

QNetworkRequest表示一个HTTP请求。

关键类:

  • QNetworkAccessManager
  • QNetworkRequest
  • QNetworkReply。
QNetworkAccessManager
get(const QNetworkRequest& )发起一个HTTP GET请求,返回QNetworkReply对象
post(const QNetworkRequest&,const QByteArray& )发起一个HTTP POST请求,返回QNetworkReply对象

 QTextEdit天然支持对HTML的解析,会对HTML进行解析渲染,最终显示的效果不是原始的HTML

http客户端回显界面代码:

get本身不是阻塞函数,get只负责发送请求,不负责等待响应回来。但response中带有一个finnished信号,通过该信号对应的槽函数来处理响应

 

 

QT多媒体

在Qt中,音频主要通过QSound类实现,但是QSound类只支持wav格式的音频文件,如果想添加音频效果需要将非wav格式的音频文件转换为wav格式。

在编写代码时,需要往.pro文件中添加multimedia模块

API函数
play()播放音频
  • 将声音文件添加到.qrc中 
  • 创建一个Sond对象
  • 调用API函数play

 

 

 

相关文章:

  • 【大模型理论篇】R1-Searcher:通过强化学习激励llm的搜索能⼒
  • Linux rpm软件管理
  • HTML5扫雷游戏开发实战
  • 计算机视觉算法实战——实例分割(主页有源码)
  • React19源码系列之Hooks(useId)
  • 【设计模式】3W 学习法全面解析 7 大结构型模式:Java 实战 + 开源框架应用
  • JavaScript 函数类型详解:函数声明、函数表达式、箭头函数
  • CEF 控制台添加一函数,枚举 注册的供前端使用的CPP交互函数有哪些
  • 顺序表的C语言实现与解析
  • 如何使用 CryptoJS 实现 DES 解密
  • 面试经典问题(持续更新)
  • 特征重要性与数据偏移的交叉分析
  • 协议层攻防战:群联AI云防护为何比传统方案更精准?
  • 五、vtkFeatureEdges边过滤器
  • C# Enumerable类 之 数据连接
  • js,html,css,vuejs手搓级联单选
  • 网络空间安全(34)安全防御体系
  • 【蓝桥杯】每天一题,理解逻辑(4/90)【Leetcode 二进制求和】
  • system()执行和shell脚本的优劣
  • Spark SQL 编程初级实践
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役
  • 追光|铁皮房、土操场,这有一座“筑梦”摔跤馆
  • 大风暴雨致湖南岳阳县6户房屋倒塌、100多户受损
  • 上海充电桩调研:须全盘考量、分步实现车网互动规模化
  • 中国以“大幅开放市场”回应贸易保护主义
  • 计划招录2577人,“国考”补录8日开始报名