目录
前言
一、TCP服务端的实现流程:
二、TCP客户端端的实现流程:
总结
前言
TCP通信的实现需要包含2个部分,TCP服务端和TCP客户端。
首先在工程文件中添加network:
QT += core gui network
一、TCP服务端的实现流程:
.h需要引入头文件:
#include <QTcpServer>
#include <QTcpSocket>
1.创建QTcpServer的对象用作监听套接字;
mServer = new QTcpServer(this);
2.使用listen()方法监听网卡的ip和端口;
mServer->listen(QHostAddress::LocalHost,8080);
3.如果有新的连接过来,并且连接成功,服务器会触发newConnection()信号,通过槽函数取出连接成功的scoket;
connect(mServer,&QTcpServer::newConnection,
this,&Widget::slotNewConnection);
void Widget::slotNewConnection()
{
while (mServer->hasPendingConnections()) {
mSocket = mServer->nextPendingConnection();
connect(mSocket,&QTcpSocket::readyRead,this,&Widget::slotReadyRead);
}
}
4.如果有数据成功传送过来,对方的通信套接字QTcpSocket会触发readyRead()信号,在槽函数可以进行读取。
void Widget::slotReadyRead()
{
QByteArray buffer = mSocket->readAll();
QString str(buffer);
ui->textEditRecv->append(str);
}
二、TCP客户端端的实现流程:
.h需要引入头文件:
#include <QTcpSocket>
1.创建QTcpSocket套接字;
mSocket = new QTcpSocket(this);
2.使用这个对象连接服务器;
mSocket->connectToHost(QHostAddress::LocalHost,8080);
3.使用write()函数向服务器发送消息;
QByteArray buffer = ui->textEditSend->toPlainText().toUtf8();
mSocket->write(buffer);
4.当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据;
QByteArray buffer = mSocket->readAll();
QString str(buffer);
ui->textEditRecv->append(str);
5.断开与服务器的连接(关于close()和disconnectFromHost()的区别,可以按F1看帮助)
mSocket->close();
mSocket->deleteLater();
总结
以上就是在QT中实现TCP通信的基本步骤和简单示例。