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());
}
相关推荐
楼田莉子13 分钟前
MySQL数据库:MySQL的数据类型
数据库·学习·mysql
小陈phd29 分钟前
系统架构师学习笔记(三)——计算机体系结构之存储系统
笔记·学习·系统架构
telllong1 小时前
BeeWare:Python原生移动应用开发
开发语言·python
海海不瞌睡(捏捏王子)1 小时前
C#知识点概要
java·开发语言·1024程序员节
aini_lovee1 小时前
C# 实现邮件发送源码(支持附件)
开发语言·javascript·c#
_MyFavorite_2 小时前
JAVA重点基础、进阶知识及易错点总结(10)Map 接口(HashMap、LinkedHashMap、TreeMap)
java·开发语言
Rsun045512 小时前
AI智能体学习路线
人工智能·学习
charlie1145141912 小时前
通用GUI编程技术——Win32 原生编程实战(十六)——Visual Studio 资源编辑器使用指南
开发语言·c++·ide·学习·gui·visual studio·win32
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB查询(4)
数据库·学习·mongodb
weixin_409383122 小时前
godot等轴视角tilemaplayer的学习 isocheric的素材xy大小怎么调
学习·游戏引擎·godot