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());
}
相关推荐
liujing102329291 分钟前
Day04_刷题niuke20250703
java·开发语言·算法
Brookty4 分钟前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
feiyangqingyun14 分钟前
Qt音视频开发技巧/推流带旋转角度/rtsprtmp推流/保存文件到MP4/拉流解析旋转角度
qt·音视频·qt旋转角度推流
能工智人小辰18 分钟前
二刷 苍穹外卖day10(含bug修改)
java·开发语言
DKPT18 分钟前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式
编程小白gogogo40 分钟前
Spring学习笔记
笔记·学习·spring
LL.。42 分钟前
同步回调和异步回调
开发语言·前端·javascript
qq_527887871 小时前
【学习笔记】Python中主函数调用的方式
笔记·学习
0wioiw01 小时前
Python基础(吃洋葱小游戏)
开发语言·python·pygame
栗子~~1 小时前
Python实战- Milvus 向量库 使用相关方法demo
开发语言·python·milvus