提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Qt 学习TCP通讯
一、TCP所使用的类
QTcpServer类和QTcpSocket类,QTcpServer类是为了创建一个服务器用于端口监听;QTcpSocket类用于建立后使用套接字通讯。
二、使用步骤
1.引入头文件
代码如下(示例):
#include <QHostInfo>
#include <QHostAddress>
#include <QtNetwork>
#include <QTcpServer>
2.创建服务器并开启监听
首先要获取自己主机或者服务器的IP,如果自己主机的话可以是常量QHostAddress::LocalHost,端口可以自己指定;
tcpServer = new QTcpServer;
QHostAddress add(IP); //IP是string类型
tcpServer.listen(add,port);//其中add是QHostAddress类型
3.监听后获取socket通讯并且关联事件
QTcpSocket= tcpServer ->nextPendingConnection(); //获取一个等待的连接
//利用槽函数将socket产生连接的状态与自己写的事件相关联进行一些事情处理
connect(tcpServer ,&QAbsractSocket::newConnected,this,&Client::onConnected);
//该connect函数中使用了QOverload类,该类返回值了一个指向特定重载函数的指针,否则在使用函数地址传递的时候找不到特定的函数
connect(tcpSocket,QOverload<QAbstractSocket::SocketState>::of(&QAbstractSocket::stateChanged),this,&Client::onSocketStateChange);
4.接受发送数据
基于行的数据通讯,只适用于纯文本通讯,每一行以一个换行符结束
发送数据:
QString msg;
QByteArry str=msg.toUtf8();
str.append('\n');
QTcpSocket->write(str);
接受数据与发送数据不同,是需要以槽的形式将tcpSocket的readyRead与自己写的事件关联起来:
connect(tcpSocket,&QAbstractSocket::readyRead,this,&Client::onSocketReadyRead);
接受数据:
QString msg;
while(tcpSocket->canReadLine())
msg=tcpSocket->ReadLine();
这样只要在读取缓冲区中还有数据并且可以读取就会一直读取数据;
总结
以上为学习TCP通讯的笔记