Qt网络编程-简易版TcpClient入门Demo(1) 原创
Qt网络编程-简易版TcpClient入门Demo(1)🖐
更多精彩内容 |
---|
👉个人内容分类汇总 👈 |
简易版 |
---|
👉Qt网络编程-简易版TcpClient入门Demo(1)👈 |
👉Qt网络编程-简易版TcpServer入门Demo(2)👈 |
👉Qt网络编程-简易版UDP单播通信入门Demo(3)👈 |
👉Qt网络编程-简易版UDP单播通信入门Demo(4)👈 |
👉Qt网络编程-简易版UDP组播通信入门Demo(5)👈 |
👉Qt网络编程-简易版UDP广播通信入门Demo(6)👈 |
进阶版 |
---|
👉Qt网络编程-TcpClient入门Demo(1)👈 |
👉Qt网络编程-TcpServer入门Demo(2)👈 |
1、概述👨🎓
使用QTcpSocket实现TCP Client,十分简易的入门Demo |
第一,绝对不意气用事;
第二,绝对不放过任何一个注释;
第三,绝对保证代码的简洁明了。🤘
为了便于学习,在这个Demo里会尽可能简单的实现TCP客户端功能,尽可能少的引入其它功能,只保留了基本功能,所以可能会有一些bug。
实现功能:
- TCP连接/断开功能;
- 数据接收功能;
- 数据发送功能
2、TCP客户端流程图🏃♀️
)]
3、 关键信号🚶♂️
信号 | 说明 |
---|---|
connected | QTcpSocket连接成功后发出此信号 |
disconnected | QTcpSocket断开连接后发出此信号 |
readyRead | 有可读数据时发出此信号 |
4、 关键函数 🧍♂️
函数名 | 说明 |
---|---|
m_tcpClient->connectToHost(IP, 端口) | TCP连接Server |
m_tcpClient->abort() | 立即关闭套接字,丢弃写入缓冲区中的任何未决数据 |
m_tcpClient->state() | 判断QTcpSocket当前状态,UnconnectedState未连接、ConnectedState已连接 |
m_tcpClient->write(QByteArray) | 发送数据 |
m_tcpClient->readAll() | 读取所有数据 |
5、主要代码🧎
-
注意:在
.pro
文件里添加QT += network
,否则编译失败。 -
.h文件
/****************************************************************************** * @文件名 simpletcpclient.h * @功能 简易的TCP客户端功能Demo,只保留TCP连接/断开、数据发送、接收功能 * * @开发者 mhf * @邮箱 1603291350@qq.com * @时间 2022/04/17 * @备注 *****************************************************************************/ #ifndef SIMPLETCPCLIENT_H #define SIMPLETCPCLIENT_H #include <QWidget> #include <QTcpSocket> namespace Ui { class SimpleTcpClient; } class SimpleTcpClient : public QWidget { Q_OBJECT public: 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() <<"发送失败!"; } }
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~