Qt中网络通信模块的使用

Qt中网络通信模块的使用

网络通信模块是一个网络应用程序必备的模块,Qt提供了支持网络通信的模块Qt Network。Qt network模块提供了用于TCP通信的QTcpSocket和QTcpServer,用于UDP通信的QUdpSocket,还有用于实现HTTP、FTP等网络协议的高级类如QNetworkRequest,QNetworkReply和QNetworkAccessManager。Qt network模块还提供用于网络代理、网络承载管理的类,提供基于安全套接字层(SSL)协议的安全网络通信的类。

要在项目中使用 Qt network模块,需要在项目的配置文件(.pro文件)中增加一条配置语句:

Qt += network

在头文件或源程序中使用Qt network模块中的类,可以包含头文件:

#include 
#include 
#include 
#include 
#include 

QTcpServer 类用于监听客户端连接以及和客户端建立连接,这个类提供的一些常用 API 函数

bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
// 判断当前对象是否在监听, 是返回true,没有监听返回false
bool QTcpServer::isListening() const;
// 如果当前对象正在监听返回监听的服务器地址信息, 否则返回 QHostAddress::Null
QHostAddress QTcpServer::serverAddress() const;
// 如果服务器正在侦听连接,则返回服务器的端口; 否则返回0
quint16 QTcpServer::serverPort() const

QTcpSocket 是一个套接字通信类,不管是客户端还是服务器端都需要使用。

QAbstractSocket::connectToHost
// 指定可接收的最大字节数 maxSize 的数据到指针 data 指向的内存中
qint64 QIODevice::read(char *data, qint64 maxSize);
// 指定可接收的最大字节数 maxSize,返回接收的字符串
QByteArray QIODevice::read(qint64 maxSize);
// 将当前可用操作数据全部读出,通过返回值返回读出的字符串
QByteArray QIODevice::readAll();
// 发送指针 data 指向的内存中的 maxSize 个字节的数据
qint64 QIODevice::write(const char *data, qint64 maxSize);
// 发送指针 data 指向的内存中的数据,字符串以 \0 作为结束标记
qint64 QIODevice::write(const char *data);
// 发送参数指定的字符串
qint64 QIODevice::write(const QByteArray &byteArray);

在使用 QTcpSocket 进行套接字通信的过程中,如果该类对象发射出 readyRead() 信号,说明对端发送的数据达到了,之后就可以调用 read 函数接收数据了

创建套接字服务器 QTcpServer 对象
通过 QTcpServer 对象设置监听,即:QTcpServer::listen()
基于 QTcpServer::newConnection() 信号检测是否有新的客户端连接
如果有新的客户端连接调用 QTcpSocket *QTcpServer::nextPendingConnection() 得到通信的套接字对象
使用通信的套接字对象 QTcpSocket 和客户端进行通信

获取本机IP地址:

//会输出结果为192.168.136.121和127.0.0.1,排除本机地址

QList list = QNetworkInterface::allAddresses();
        foreach(QHostAddress address,list){
           if(address.protocol() == QAbstractSocket::IPv4Protocol&&address.toString()!="127.0.0.1"){
               QString localip=address.toString();
               qDebug()<

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器

你可能感兴趣的:(Qt开发,qt,c++)