日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt网络编程-简易版TcpClient入门Demo(1) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Qt網(wǎng)絡(luò)編程-簡易版TcpClient入門Demo(1)🖐

文章目錄

  • Qt網(wǎng)絡(luò)編程-簡易版TcpClient入門Demo(1)🖐
    • 1、概述👨?🎓
    • 2、TCP客戶端流程圖🏃?♀?
    • 3、 關(guān)鍵信號(hào)🚶?♂?
    • 4、 關(guān)鍵函數(shù) 🧍?♂?
    • 5、主要代碼🧎
    • 6、實(shí)現(xiàn)效果🏄
    • 7、源代碼🤸

更多精彩內(nèi)容
👉個(gè)人內(nèi)容分類匯總 👈
簡易版
👉Qt網(wǎng)絡(luò)編程-簡易版TcpClient入門Demo(1)👈
👉Qt網(wǎng)絡(luò)編程-簡易版TcpServer入門Demo(2)👈
👉Qt網(wǎng)絡(luò)編程-簡易版UDP單播通信入門Demo(3)👈
👉Qt網(wǎng)絡(luò)編程-簡易版UDP單播通信入門Demo(4)👈
👉Qt網(wǎng)絡(luò)編程-簡易版UDP組播通信入門Demo(5)👈
👉Qt網(wǎng)絡(luò)編程-簡易版UDP廣播通信入門Demo(6)👈
進(jìn)階版
👉Qt網(wǎng)絡(luò)編程-TcpClient入門Demo(1)👈
👉Qt網(wǎng)絡(luò)編程-TcpServer入門Demo(2)👈

1、概述👨?🎓

使用QTcpSocket實(shí)現(xiàn)TCP Client,十分簡易的入門Demo

第一,絕對(duì)不意氣用事;

第二,絕對(duì)不放過任何一個(gè)注釋;

第三,絕對(duì)保證代碼的簡潔明了。🤘

為了便于學(xué)習(xí),在這個(gè)Demo里會(huì)盡可能簡單的實(shí)現(xiàn)TCP客戶端功能,盡可能少的引入其它功能,只保留了基本功能,所以可能會(huì)有一些bug。

實(shí)現(xiàn)功能:

  • TCP連接/斷開功能;
  • 數(shù)據(jù)接收功能;
  • 數(shù)據(jù)發(fā)送功能

2、TCP客戶端流程圖🏃?♀?


)]

3、 關(guān)鍵信號(hào)🚶?♂?

信號(hào)說明
connectedQTcpSocket連接成功后發(fā)出此信號(hào)
disconnectedQTcpSocket斷開連接后發(fā)出此信號(hào)
readyRead有可讀數(shù)據(jù)時(shí)發(fā)出此信號(hào)

4、 關(guān)鍵函數(shù) 🧍?♂?

函數(shù)名說明
m_tcpClient->connectToHost(IP, 端口)TCP連接Server
m_tcpClient->abort()立即關(guān)閉套接字,丟棄寫入緩沖區(qū)中的任何未決數(shù)據(jù)
m_tcpClient->state()判斷QTcpSocket當(dāng)前狀態(tài),UnconnectedState未連接、ConnectedState已連接
m_tcpClient->write(QByteArray)發(fā)送數(shù)據(jù)
m_tcpClient->readAll()讀取所有數(shù)據(jù)

5、主要代碼🧎

  • 注意:在.pro文件里添加QT += network,否則編譯失敗。

  • .h文件

    /******************************************************************************* @文件名 simpletcpclient.h* @功能 簡易的TCP客戶端功能Demo,只保留TCP連接/斷開、數(shù)據(jù)發(fā)送、接收功能** @開發(fā)者 mhf* @郵箱 1603291350@qq.com* @時(shí)間 2022/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連接成功后發(fā)出connected信號(hào)connect(m_tcpClient, &QTcpSocket::disconnected, this, &SimpleTcpClient::on_disconnected); // TCP斷開連接后發(fā)出disconnected信號(hào)connect(m_tcpClient, &QTcpSocket::readyRead, this, &SimpleTcpClient::on_readyRead); // 當(dāng)有可讀數(shù)據(jù)時(shí)發(fā)出readyRead信號(hào) }SimpleTcpClient::~SimpleTcpClient() {if(m_tcpClient->state() != QAbstractSocket::UnconnectedState){m_tcpClient->abort(); // 因?yàn)樵訇P(guān)閉時(shí)會(huì)修改but_connect文本,所以如果由系統(tǒng)再析構(gòu)時(shí)自動(dòng)釋放則會(huì)出現(xiàn)的錯(cuò)誤,再這里關(guān)閉了就不會(huì)出現(xiàn)了}delete ui; }/*** @brief TCP連接/斷開控制,不需要指定本地端口,默認(rèn)自動(dòng)分配一個(gè)端口*/ void SimpleTcpClient::on_but_connect_clicked() {if(m_tcpClient->state() == QAbstractSocket::UnconnectedState) // 判斷連接狀態(tài),如果未連接則開始連接{m_tcpClient->connectToHost(ui->line_peerAddress->text(), // 目標(biāo)IP地址ui->spin_peerPort->value()); // 目標(biāo)端口號(hào)}else // 如果不是未連接則斷開連接{m_tcpClient->abort();} }/*** @brief TCP連接成功,修改按鍵狀態(tài)*/ void SimpleTcpClient::on_connected() {ui->but_connect->setText("斷開連接"); }/*** @brief TCP斷開連接,修改按鍵狀態(tài)*/ void SimpleTcpClient::on_disconnected() {ui->but_connect->setText("連接"); }/*** @brief TCP讀取數(shù)據(jù)并顯示*/ void SimpleTcpClient::on_readyRead() {QByteArray dataArr = m_tcpClient->readAll(); // 一次性讀取緩存中所有數(shù)據(jù)if(dataArr.count() <= 0) // 沒有讀取到數(shù)據(jù){return;}ui->text_recv->append(dataArr); // 顯示讀取到的數(shù)據(jù) }/*** @brief 發(fā)送數(shù)據(jù)*/ void SimpleTcpClient::on_but_send_clicked() {if(m_tcpClient->state() != QAbstractSocket::ConnectedState) return; // 判斷TCP是否已連接,如果沒有連接則不發(fā)送數(shù)據(jù)QString str = ui->text_send->toPlainText(); // 獲取輸入框的內(nèi)容qint64 len = m_tcpClient->write(str.toUtf8()); // 發(fā)送數(shù)據(jù),toUtf8()是為了支持發(fā)送中文,但是如果接收端編碼方式不同則中文可能顯示亂碼if(len < 0){qWarning() <<"發(fā)送失敗!";} }

6、實(shí)現(xiàn)效果🏄

7、源代碼🤸

gitee
github
🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏🤏

總結(jié)

以上是生活随笔為你收集整理的Qt网络编程-简易版TcpClient入门Demo(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。