1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Qt网络编程-简易版TcpClient入门Demo(1)

Qt网络编程-简易版TcpClient入门Demo(1)

时间:2022-02-02 16:34:19

相关推荐

Qt网络编程-简易版TcpClient入门Demo(1)

Qt网络编程-简易版TcpClient入门Demo(1)🖐

文章目录

Qt网络编程-简易版TcpClient入门Demo(1)🖐1、概述👨‍🎓2、TCP客户端流程图🏃‍♀️3、 关键信号🚶‍♂️4、 关键函数 🧍‍♂️5、主要代码🧎6、实现效果🏄7、源代码🤸

1、概述👨‍🎓

第一,绝对不意气用事;

第二,绝对不放过任何一个注释;

第三,绝对保证代码的简洁明了。🤘

为了便于学习,在这个Demo里会尽可能简单的实现TCP客户端功能,尽可能少的引入其它功能,只保留了基本功能,所以可能会有一些bug。

实现功能:

TCP连接/断开功能;数据接收功能;数据发送功能

2、TCP客户端流程图🏃‍♀️

)]

3、 关键信号🚶‍♂️

4、 关键函数 🧍‍♂️

5、主要代码🧎

注意:在.pro文件里添加QT += network,否则编译失败。

.h文件

/******************************************************************************* @文件名simpletcpclient.h* @功能 简易的TCP客户端功能Demo,只保留TCP连接/断开、数据发送、接收功能** @开发者mhf* @邮箱 1603291350@* @时间 /04/17* @备注*****************************************************************************/#ifndef SIMPLETCPCLIENT_H#define SIMPLETCPCLIENT_H#include <QWidget>#include <QTcpSocket>namespace Ui {class SimpleTcpClient;}class SimpleTcpClient : public QWidget{Q_OBJECTpublic:explicit SimpleTcpClient(QWidget *parent = nullptr);~SimpleTcpClient();private slots:void on_connected();void on_disconnected();void on_readyRead();void on_but_connect_clicked();void on_but_send_clicked();private:Ui::SimpleTcpClient *ui;QTcpSocket* m_tcpClient = nullptr;};#endif // SIMPLETCPCLIENT_H

.cpp文件

#include "simpletcpclient.h"#include "ui_simpletcpclient.h"#include <qhostaddress.h>SimpleTcpClient::SimpleTcpClient(QWidget *parent) :QWidget(parent),ui(new Ui::SimpleTcpClient){ui->setupUi(this);this->setWindowTitle("简易版本TCP 客户端Demo");m_tcpClient = new QTcpSocket(this);connect(m_tcpClient, &QTcpSocket::connected, this, &SimpleTcpClient::on_connected); // TCP连接成功后发出connected信号connect(m_tcpClient, &QTcpSocket::disconnected, this, &SimpleTcpClient::on_disconnected); // TCP断开连接后发出disconnected信号connect(m_tcpClient, &QTcpSocket::readyRead, this, &SimpleTcpClient::on_readyRead); // 当有可读数据时发出readyRead信号}SimpleTcpClient::~SimpleTcpClient(){if(m_tcpClient->state() != QAbstractSocket::UnconnectedState){m_tcpClient->abort(); // 因为再关闭时会修改but_connect文本,所以如果由系统再析构时自动释放则会出现的错误,再这里关闭了就不会出现了}delete ui;}/*** @brief TCP连接/断开控制,不需要指定本地端口,默认自动分配一个端口*/void SimpleTcpClient::on_but_connect_clicked(){if(m_tcpClient->state() == QAbstractSocket::UnconnectedState) // 判断连接状态,如果未连接则开始连接{m_tcpClient->connectToHost(ui->line_peerAddress->text(),// 目标IP地址ui->spin_peerPort->value()); // 目标端口号}else// 如果不是未连接则断开连接{m_tcpClient->abort();}}/*** @brief TCP连接成功,修改按键状态*/void SimpleTcpClient::on_connected(){ui->but_connect->setText("断开连接");}/*** @brief TCP断开连接,修改按键状态*/void SimpleTcpClient::on_disconnected(){ui->but_connect->setText("连接");}/*** @brief TCP读取数据并显示*/void SimpleTcpClient::on_readyRead(){QByteArray dataArr = m_tcpClient->readAll(); // 一次性读取缓存中所有数据if(dataArr.count() <= 0) // 没有读取到数据{return;}ui->text_recv->append(dataArr); // 显示读取到的数据}/*** @brief 发送数据*/void SimpleTcpClient::on_but_send_clicked(){if(m_tcpClient->state() != QAbstractSocket::ConnectedState) return; // 判断TCP是否已连接,如果没有连接则不发送数据QString str = ui->text_send->toPlainText(); // 获取输入框的内容qint64 len = m_tcpClient->write(str.toUtf8());// 发送数据,toUtf8()是为了支持发送中文,但是如果接收端编码方式不同则中文可能显示乱码if(len < 0){qWarning() <<"发送失败!";}}

6、实现效果🏄

7、源代码🤸

gitee

github

🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。