Qt 网络编程

发布时间:2026/5/19 4:57:38

Qt 网络编程 文章目录主机信息查询TCP通信UDP通信基于TCP的HTTP通信QtNetwork模块提供了用于编写TCP/IP网络应用程序的各种类如用于TCP通信的QTcpSocket 和QTcpServer用于UDP通信的QUdpSocket还有用于网络承载管理的类以及基于SSL协议的用于网络安全通信的类主机信息查询QHostInfo类可以根据主机名获取主机的IP地址或者通过IP地址获取主机名静态函数localHostName可获取本机的主机名静态函数fromName()可以通过主机名获取IP地址静态函数lookupHost()可通过一个主机名以异步方式查找这个主机的IP地址QNetworkInterface类可以获得运行主机的所有IP地址和网络接口列表静态函数allInterface()返回主机上所有的网络接口列表一个网络接口可能包含多个IP地址每个IP地址与掩码或广播地址关联静态函数allAddresses()可以获取主机上所有的IP地址列表无须知道子网掩码和广播地址TCP通信传输控制协议(transmission control protocol, TCP)是一种被大多数Internet网络协议用于数据传输的底层网络协议它是可靠的、面向流和连接的传输协议适用于连续数据的传输。TCP通信必须先建立TCP连接通信端分为客户端和服务器端使用Qt提供的类进行基于TCP的套接字通信需要用到两个类QTcpServer服务器类用于监听客户端连接以及和客户端建立连接QTcpSocket通信的套接字类客户端、服务器端都需要使用这两个套接字通信类都属于网络模块 network重点函数//继承自QAbstractSocket//连接服务器virtualvoidconnectToHost(constQHostAddressaddress,quint16 port,QIODevice::OpenMode openModeReadWrite);//断开连接virtualvoiddisconnectFromHost()//继承自QIODevice//判断是否有数据可读virtualqint64bytesAvailable()const//读取接收到的数据QByteArrayread(qint64 maxSize)QByteArrayreadAll()//发送数据qint64write(constQByteArraybyteArray)重点信号//继承自QAbstractSocket//connectToHost连接服务器成功后发射此信号voidconnected()//断开连接后发射此信号voiddisconnected()//有错误发生时 发射此信号voiderror(QAbstractSocket::SocketError socketError)//继承自QIODevice//当缓冲区中有数据需要读时发射此信号voidreadyRead()UDP通信用户数据报协议 ( User Datagram Protocol ,UDP)是一种无连接的传输层协议提供面向事务的简单不可靠信息传送服务 与TCP 不同 UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。 适用于需要快速传输少量数据的场景因为它不会建立连接所以传输效率比较高 通常用于实时应用程序比如视频会议在线游戏、语音聊天等因为这些应用程序通常要求实时性比较高而且数据包丢失对应用程序的影响也不是很大Qt环境下UDP编程如果通信的双方都绑定特定的端口号就不再严格区分客户端与服务器端了TCP中需要用到两个类QTcpSever和QTcpSocket而UDP中只需要使用一个类QUdpSocket。 UDP通信时需要用到本地端口目标端口目标IP地址其中本地端口自己为该UDP主机设置的端口号目的是对方发送数据时会发到本机此端口上QUdpSocket类用于实现UDP通信它与QTcpSocket具有相同的父类QAbstractSocket因而这两个类共享大部分的接口函数重点函数//继承自QAbstractSocket//绑定端口号boolbind(quint16 port,QAbstractSocket::BindMode mode);//关闭套接字voidQAbstractSocket::close();//QUdpSocket自身定义//数据报发送形参分别为数据报目的IP地址目的端口号qint64writeDatagram(constchar*data,qint64 size,constQHostAddressaddress,quint16 port);qint64writeDatagram(constQNetworkDatagramdatagram);qint64writeDatagram(constQByteArraydatagram,constQHostAddresshost,quint16 port);//socket中有接收到用户发来的数据报时返回值为trueboolhasPendingDatagrams()const//返回待读取数据报的大小qint64pendingDatagramSize()const//读取数据报返回读取数据报的字节数maxSize为设置的读取字节数qint64readDatagram(char*data,qint64 maxSize,QHostAddress*addressnullptr,quint16*portnullptr)重点信号//继承自QIODevice//当缓冲区中有数据需要读时发射此信号voidreadyRead()基于TCP的HTTP通信Qt网络模块提供了一些类来实现OSI七层网络模型中高层的网络协议例如HTTP、FTP、SNMP等这些类主要是QNetworkRequest、QNetworkAccessManager和QNetworkReplyQNetworkRequest 通过URL发起网络协议请求也保存网络请求的信息目前支持HTTP、FTP和本地文件URL的上传和下载//设置urlvoidsetUrl(constQUrlurl)//设置头部voidsetRawHeader(constQByteArrayheaderName,constQByteArrayheaderValue)QNetworkReply表示网络请求的响应由 QNetworkAccessManager 在发送网络请求后创建网络响应QNetworkReply提供的信号finished()、readyRead()、downloadProgress可用于监测网络响应的执行情况进而进行相应的操作//下载进度信号voiddownloadProgress(qint64 bytesReceived,qint64 bytesTotal)//有错误发生发出信号voiderror(QNetworkReply::NetworkError code)//结束voidfinished()//有数据来时会发出信号voidreadyRead()QNetworkAccessManager负责发送网络请求以及创建网络响应//将数据内容上载到目标请求QNetworkReply*QNetworkAccessManager::put(constQNetworkRequestrequest,QIODevice*data)//发送请求获取响应QNetworkReply*get(constQNetworkRequestrequest)// post 等等

相关新闻