QT实现TCP通信

时间:2025-05-07 08:21:27

目录

 

前言

一、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通信的基本步骤和简单示例。