本文共 2404 字,大约阅读时间需要 8 分钟。
首先我们需要设置服务器:
项目文件中加入:QT += network 相关头文件:#include<QTcpServer>//监听套接字
#include<QTcpSocket>//建立连接的通信套接字 1 2 在头文件中,定义套接字:QTcpServer *tcpServer;//监听套接字
QTcpSocket *tcpSocket;//通信套接字 1 2 随后,在cpp文件中初始化://初始化套接字
tcpServer = NULL; tcpSocket = NULL; //监听套接字,指定父对象自动回收空间 tcpServer = new QTcpServer(this); //设定端口 tcpServer->listen(QHostAddress::Any,8888); 1 2 3 4 5 6 7 当新连接建立时,监听套接字会自动触发信号:newConnection ,读取到数据之后,通信套接字会触发信号readyRead,因此,我们可以通过信号槽机制进行操作,这里嵌套了两个Qt5的Lambda表达式://新连接建立的信号槽
connect(tcpServer,&QTcpServer::newConnection,[=]() { //取出建立好连接的套接字 tcpSocket = tcpServer->nextPendingConnection(); //获取对方的IP和端口 QString ip = tcpSocket->peerAddress().toString(); qint16 port = tcpSocket->peerPort(); //将信息显示到UI QString temp = QString("[%1:%2]:成功连接").arg(ip).arg(port); ui->textEditRead->setText(temp); //连接建立后,读取到数据的信号槽 connect(tcpSocket,&QTcpSocket::readyRead, [=]() { //从通信套接字取出内容 QByteArray array = tcpSocket->readAll(); //显示到UI ui->textEditRead->append(array); } ); }); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 客户端的设置与服务器类似,只不过少了一个监听套接字: 头文件中定义套接字:QTcpSocket * tcpSocket;//通信套接字 cpp文件初始化套接字://初始化套接字
tcpSocket = NULL; //分配空间,指定父对象 tcpSocket = new QTcpSocket(this); 1 2 3 4 信号槽与服务器类似,这里的Lambda表达式没有嵌套://获取服务器IP和端口
QString ip = ui->lineEditIP->text(); qint16 port = ui->lineEditPort->text().toInt(); //主动连接服务器 tcpSocket->connectToHost(QHostAddress(ip),port); //建立连接的信号槽 connect(tcpSocket,&QTcpSocket::connected, [=]() { ui->textEditRead->setText("恭喜,成功连接服务器!"); } ); //连接建立后收到服务器数据的信号槽 connect(tcpSocket,&QTcpSocket::readyRead, [=]() { //获取对方发送的内容 QByteArray array = tcpSocket->readAll(); //显示到编辑框 ui->textEditRead->append(array);//append,添加内容 } //发送数据 //获取编辑框内容 QString str = ui->textEditWrite->toPlainText(); //发送数据 tcpSocket->write( str.toUtf8().data() ); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 关于断开连接: 1、disconnectFromHost() 尝试关闭套接字。如果有等待写入的挂起数据,qabstracksocket将进入关闭状态,并等待所有数据写入完毕。最终,它将进入未连接状态并发出disconnected()信号。 2、abort() 中止当前连接并重置套接字。与disconnectFromHost ( )不同,此函数会立即关闭套接字,丢弃写入缓冲区中的所有挂起数据。 3、close() 关闭套接字的I / O设备,断开套接字与主机的连接,关闭套接字,并重置名称、地址、端口号和基础套接字描述符。效果如图,连接建立后服务器与客户端相互发送数据:
Demo下载地址:
链接:https://pan.baidu.com/s/12pGsDS-NlKke7a5SlpBqLQ 密码:eesc如果阅读本篇博客有障碍,可参考网络编程基础知识:
可以参考https://blog.csdn.net/qq_40194498/article/details/78901089 https://blog.csdn.net/qq_40194498/article/details/78934426 原文:https://blog.csdn.net/qq_40194498/article/details/79710824