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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【QT实现TCP和UDP协议通信(二)】

發(fā)布時間:2024/3/12 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【QT实现TCP和UDP协议通信(二)】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

QT實現(xiàn)TCP和UDP協(xié)議通信(二)

編程環(huán)境 :Windows10 x64 下 QtCreator
語言 :C++
作者 :wddkxg
時間 :2022.4.24
項目 :Server + Client

**Client(客戶端)**

1.創(chuàng)建新項目 選擇Qt Widget Application即可 。

2.項目工程文件中(.pro)加入 QT += network

3.引入頭文件<QTcpServer> , <QTcpSocket> , <QUdpSocket>

4.ui 界面設(shè)計 : 一個lineEdit用于輸入端口號,一個lineEdit用于輸入ip地址,一個PushButton為連接按鈕, 一個PushButton為發(fā)送按鈕,兩個復(fù)選框可以選擇TCP或UDP協(xié)議,一個lineEdit用于顯示連接狀態(tài), 一個TextEdit用于輸入要發(fā)送信息的文本。 ![Client的ui設(shè)計](https://img-blog.csdnimg.cn/45e3929024f14a748dd369dae1b3b5f5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YeR5puc5pel44Gu5paw5oGS,size_13,color_FFFFFF,t_70,g_se,x_16#pic_center)

5.Client需要的幾個功能:斷開連接、TCP協(xié)議連接、發(fā)送數(shù)據(jù) void socket_disconnected();//斷開連接 void on_pushButtonconnect_clicked();//TCP連接 void on_pushButton_send_clicked();//發(fā)送數(shù)據(jù)

6.創(chuàng)建對象: QTcpSocket *mSocket;//TCP套接字對象 QUdpSocket *uSocket;//UDP套接字對象

7.源碼: client.h #ifndef APP_H #define APP_H#include <QMainWindow> #include<QTcpServer> #include<QTcpSocket> #include<QHostAddress> #include<QFile> #include<QTimer> #include<QMessageBox> #include<QUdpSocket>QT_BEGIN_NAMESPACE namespace Ui { class App; } QT_END_NAMESPACE/*客戶端*/ class App : public QMainWindow {Q_OBJECTpublic:App(QWidget *parent = nullptr);~App();public slots:void onTimeOut();//計時器private slots:void socket_disconnected();//斷開連接void on_pushButtonconnect_clicked();//TCP連接void on_pushButton_send_clicked();//發(fā)送數(shù)據(jù)void on_checkBox_auto_clicked(bool checked);//自動發(fā)送private:Ui::App *ui;QTcpSocket *mSocket;//TCP套接字對象QUdpSocket *uSocket;//UDP套接字對象QTimer *tim;//定時器對象 }; #endif // APP_H

client.cpp

/*****************************************************************************************/ /* 客戶端 */ /* 2022.03.02 */ /* wddkxg */ /* v1.0 */ /*****************************************************************************************/ #include "client.h" #include "ui_client.h" #include<QDebug> #include<windows.h> #include<QThread>/*構(gòu)造函數(shù)*/ App::App(QWidget *parent): QMainWindow(parent), ui(new Ui::App) {ui->setupUi(this);ui->ipEdit->setText("10.0.0.58");//默認(rèn)顯示ip為192.168.1.44ui->portEdit->setText("8080");//默認(rèn)顯示端口為8080mSocket = new QTcpSocket();//TCP套接字初始化ui->pushButton_send->setEnabled(true);QObject::connect(mSocket,&QTcpSocket::readyRead,this,&App::on_pushButton_send_clicked);QObject::connect(mSocket,&QTcpSocket::disconnected,this,&App::socket_disconnected);uSocket = new QUdpSocket(this);//UDP套接字初始化tim = new QTimer();//初始化計時器對象tim->setInterval(1000);//設(shè)置計時器間隔時間為1sconnect(tim,SIGNAL(timeout()),this,SLOT(onTimeOut()));//連接信號槽tim->start();//初始化計時器狀態(tài) }/*析構(gòu)函數(shù)*/ App::~App() {delete this->uSocket;delete this->mSocket;delete ui; }/*TCP連接*/ void App::on_pushButtonconnect_clicked() {if(ui->pushButtonconnect->text() == QString::fromLocal8Bit("連接")){QString IP;int port; IP = ui->ipEdit->text(); //獲取IP地址port = ui->portEdit->text().toInt(); //獲取端口號mSocket->abort();//取消已有的連接mSocket->connectToHost(IP, port);//連接服務(wù)器if(!mSocket->waitForConnected(30000))//等待連接成功{qDebug() << "Connection failed!";ui->lineEdit_state->setText(QString::fromLocal8Bit("連接失敗!"));return;}qDebug() << "Connect successfully!";ui->lineEdit_state->setText(QString::fromLocal8Bit("連接成功!")); ui->pushButton_send->setEnabled(true);//發(fā)送按鍵使能ui->pushButtonconnect->setText(QString::fromLocal8Bit("斷開連接"));//修改按鍵文字}else{ mSocket->disconnectFromHost();//斷開連接ui->pushButtonconnect->setText(QString::fromLocal8Bit("連接"));//修改按鍵文字ui->pushButton_send->setEnabled(true);//發(fā)送按鍵使能} }/*發(fā)送數(shù)據(jù)*/ void App::on_pushButton_send_clicked() {qDebug()<<"Send: "<<ui->textEdit_enter->toPlainText().toLatin1();if(ui->radioButton_TCP->isChecked())//判斷使用TCP協(xié)議{qDebug()<<"TCP";mSocket->write(ui->textEdit_enter->toPlainText().toLatin1());//tcp協(xié)議下客戶端發(fā)送框內(nèi)容寫入緩沖mSocket->flush();}else if(ui->radioButton_UDP->isChecked())//判斷使用UDP協(xié)議{qDebug()<<"UDP";uSocket->writeDatagram(ui->textEdit_enter->toPlainText().toLatin1(),QHostAddress("10.0.0.58"),8080);//udp協(xié)議下客戶端發(fā)送框內(nèi)容寫入緩沖uSocket->flush();}else{ui->lineEdit_state->setText("choose TCP or UDP ");//未選擇協(xié)議} }/*斷開連接*/ void App::socket_disconnected() {ui->pushButton_send->setEnabled(false);//關(guān)閉發(fā)送按鍵ui->pushButtonconnect->setText(QString::fromLocal8Bit("連接"));//顯示qDebug()<<"Disconnected!"; }/*自動發(fā)送*/ void App::on_checkBox_auto_clicked(bool checked) {if(checked)//判斷自動發(fā)送是否選中{onTimeOut();//調(diào)用計時器延時發(fā)送} }/*設(shè)置定時器延時發(fā)送*/ void App::onTimeOut() {if(ui->checkBox_auto->isChecked())//判斷自動發(fā)送是否選中{static int value = 0;ui->progressBar->setValue(value++);if(value>5)//延時5秒發(fā)送一次{tim->stop();on_pushButton_send_clicked();tim->start();ui->progressBar->setValue(value = 0);ui->checkBox_auto->setChecked(false);}}}

main1.cpp

#include "client.h" #include <QApplication>int main(int argc, char *argv[])//主函數(shù) {QApplication a(argc, argv);App w;w.show();w.onTimeOut();return a.exec(); }

8.源碼中ui設(shè)計新增了一些內(nèi)容,可以看情況刪減使用。

總結(jié)

以上是生活随笔為你收集整理的【QT实现TCP和UDP协议通信(二)】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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