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());
}
相关推荐
魔力女仆5 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
2401_894915536 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
MartinYeung56 小时前
[论文学习]自主性如何重塑个性化对LLM智能体隐私关切与信任的影响
人工智能·学习
麻瓜老宋7 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
FellAveal8 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
菜鸟‍8 小时前
【论文学习】MICCAI 2024 || SGSeg:通过自引导机制实现胸部X光片语言引导分割的无文本推理
人工智能·深度学习·学习
lazy H8 小时前
Git clone 怎么用?克隆项目及常见问题完整教程
大数据·git·后端·学习·搜索引擎·github
菜鸟‍8 小时前
【论文学习】arxiv 2024 || RoSIS:基于鲁棒框架重新审视文本提示式手术器械分割
人工智能·学习·计算机视觉
颜x小9 小时前
[C#] C++与c#语法对比
开发语言·c++·c#
weixin_423652139 小时前
C#使用JObject
开发语言·c#