qt学习:Network网络类+tcp客户端+tcp服务端

目录

头文件

模块

实战

tcp客户端

配置ui界面

[添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数](#添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数)

在ui界面的构造函数里添加

实现连接服务器按钮点击事件

槽函数实现

发送数据按钮点击事件

tcp服务端

配置ui界面

[添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数](#添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数)

在ui界面的构造函数里添加

槽函数实现

发送数据按钮点击事件


头文件

#include <QtNetwork>

模块

在pro里添加 QT += core gui network

实战

tcp客户端

配置ui界面

添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数

复制代码
在pro文件里
QT       += core gui network

#include <QTcpSocket>

private:
    QTcpSocket *m_tcpSocket;

private slots:
    void onRecvDataSlot();
    void onConnectToServer();

在ui界面的构造函数里添加

复制代码
    //1、实例化客户端类的对象
    m_tcpSocket = new QTcpSocket;

实现连接服务器按钮点击事件

复制代码
//连接服务器
void Widget::on_btn_connect_clicked()
{
    //2、获取服务器的IP地址和端口号
    QString ip = ui->lineEdit_ip->text();
    quint16 port = ui->lineEdit_port->text().toUInt();

    //3、连接服务器
    m_tcpSocket->connectToHost(QHostAddress(ip),port);

    //如果连接成功,自动发射出信号  connected(),关联槽函数,在槽函数中提示一下连接成功
    connect(m_tcpSocket,&QTcpSocket::connected,this,&Widget::onConnectToServer); //lambada表达式匿名的函数

    //4、当服务器有数据发送过来的时候,m_tcpSocket会自动发射一个readyRead信号,关联槽函数,在槽函数中接收数据
    connect(m_tcpSocket,&QTcpSocket::readyRead,this,&Widget::onRecvDataSlot);
}

槽函数实现

复制代码
//数据接收槽函数
void Widget::onRecvDataSlot()
{
    //读取网络中套接字的数据
    QByteArray data = m_tcpSocket->readAll();
    ui->textBrowser->append(data);
}

//连接槽函数
void Widget::onConnectToServer()
{
    ui->textBrowser->append("连接成功");
}

发送数据按钮点击事件

复制代码
void Widget::on_btn_send_clicked()
{
    QString data = ui->textEdit->toPlainText();
    m_tcpSocket->write(data.toUtf8().data());
}

tcp服务端

配置ui界面

添加网络模块和头文件 ,和定义QTcpSocket指针变量和定义连接成功槽函数,数据接收槽函数

复制代码
QT       += core gui network

#include <QTcpServer>
#include <QTcpSocket>

private:
    QTcpServer *m_tcpServer;
    QTcpSocket *newClient;

private slots:
    void onRecvDataSlot();
    void onRecvNewClient();

在ui界面的构造函数里添加

复制代码
    //1、实例化服务器类的对象
    m_tcpServer = new QTcpServer;
    //2、绑定自己的IP地址和端口号、并且监听
    m_tcpServer->listen(QHostAddress::Any,12000);
    //3、如果有新的客户端连接上来,m_tcpServer对象会自动发射一个信号newConnection()
    //关联槽函数,在槽函数中接收 新的客户端的对象的连接
    connect(m_tcpServer,&QTcpServer::newConnection,this,&Widget::onRecvNewClient);

槽函数实现

复制代码
//接收数据槽函数
void Widget::onRecvDataSlot()
{
    QByteArray data = newClient->readAll();
    ui->textBrowser->append(data);
}
//接收客户端槽函数
void Widget::onRecvNewClient()
{
    //接收新的客户端对象
    newClient = m_tcpServer->nextPendingConnection();

    //如果有客户端发送数据过来,那么newClient会自动发射 readyRead信号,关联槽函数,接收数据
    connect(newClient,&QTcpSocket::readyRead,this,&Widget::onRecvDataSlot);

    //把连接上来的客户端IP 和端口号  打印到界面上
    QString text = QString("有新的客户端连接上来 IP:%1 Port:%2")
                        .arg(newClient->peerAddress().toString()
                        .arg(newClient->peerPort()));
    ui->textBrowser->append(text);
}

发送数据按钮点击事件

复制代码
//发送数据
void Widget::on_btn_send_clicked()
{
    //1 获取你要发送的数据
    QString data = ui->textEdit->toPlainText();
    //2 发送
    newClient->write(data.toUtf8().data());
}
相关推荐
执风挽^9 分钟前
Python基础编程题2
开发语言·python·算法·visual studio code
●VON19 分钟前
CANN推理引擎:从云端到边缘的极致加速与部署实战
学习·react native
Z9fish19 分钟前
sse哈工大C语言编程练习20
c语言·开发语言·算法
笔画人生22 分钟前
深度解析 CANN 项目:以 `ops-transformer` 为例探索高性能 AI 算子库
学习·开源
萧鼎43 分钟前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
AI视觉网奇1 小时前
3d数字人 ue blender 绑定衣服对齐 2026
学习·ue5
Nan_Shu_6141 小时前
学习: Blender 基础篇
学习·blender
Anastasiozzzz1 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步1 小时前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机1 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉