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());
}
相关推荐
历程里程碑3 分钟前
Linux 1 指令(1)入门:6大基础指令详解
linux·运维·服务器·c语言·开发语言·数据结构·c++
sycmancia3 分钟前
C语言学习08——函数
c语言·学习
少控科技4 小时前
QT新手日记024 - QT001程序代码
开发语言·qt
莫非王土也非王臣8 小时前
深度学习之对比学习
人工智能·深度学习·学习
Wzx1980128 小时前
doker深学习
学习·docker
码农水水9 小时前
国家电网Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·网络·分布式·面试·wpf
InterestOriented9 小时前
破解银发学习痛点 兴趣岛 “普惠 + 品质” 模式打造积极老龄化范本
大数据·人工智能·学习
浮尘笔记9 小时前
Go语言临时对象池:sync.Pool的原理与使用
开发语言·后端·golang
咕噜咕噜啦啦10 小时前
Java期末习题速通
java·开发语言
HyperAI超神经10 小时前
IQuest-Coder-V1:基于代码流训练的编程逻辑增强模型;Human Face Emotions:基于多标注维度的人脸情绪识别数据集
人工智能·深度学习·学习·机器学习·ai编程