【QT实现TCP和UDP协议通信(二)】
生活随笔
收集整理的這篇文章主要介紹了
【QT实现TCP和UDP协议通信(二)】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
QT實現TCP和UDP協議通信(二)
編程環境 :Windows10 x64 下 QtCreator
語言 :C++
作者 :wddkxg
時間 :2022.4.24
項目 :Server + Client
client.cpp
/*****************************************************************************************/ /* 客戶端 */ /* 2022.03.02 */ /* wddkxg */ /* v1.0 */ /*****************************************************************************************/ #include "client.h" #include "ui_client.h" #include<QDebug> #include<windows.h> #include<QThread>/*構造函數*/ App::App(QWidget *parent): QMainWindow(parent), ui(new Ui::App) {ui->setupUi(this);ui->ipEdit->setText("10.0.0.58");//默認顯示ip為192.168.1.44ui->portEdit->setText("8080");//默認顯示端口為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);//設置計時器間隔時間為1sconnect(tim,SIGNAL(timeout()),this,SLOT(onTimeOut()));//連接信號槽tim->start();//初始化計時器狀態 }/*析構函數*/ 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);//連接服務器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);//發送按鍵使能ui->pushButtonconnect->setText(QString::fromLocal8Bit("斷開連接"));//修改按鍵文字}else{ mSocket->disconnectFromHost();//斷開連接ui->pushButtonconnect->setText(QString::fromLocal8Bit("連接"));//修改按鍵文字ui->pushButton_send->setEnabled(true);//發送按鍵使能} }/*發送數據*/ void App::on_pushButton_send_clicked() {qDebug()<<"Send: "<<ui->textEdit_enter->toPlainText().toLatin1();if(ui->radioButton_TCP->isChecked())//判斷使用TCP協議{qDebug()<<"TCP";mSocket->write(ui->textEdit_enter->toPlainText().toLatin1());//tcp協議下客戶端發送框內容寫入緩沖mSocket->flush();}else if(ui->radioButton_UDP->isChecked())//判斷使用UDP協議{qDebug()<<"UDP";uSocket->writeDatagram(ui->textEdit_enter->toPlainText().toLatin1(),QHostAddress("10.0.0.58"),8080);//udp協議下客戶端發送框內容寫入緩沖uSocket->flush();}else{ui->lineEdit_state->setText("choose TCP or UDP ");//未選擇協議} }/*斷開連接*/ void App::socket_disconnected() {ui->pushButton_send->setEnabled(false);//關閉發送按鍵ui->pushButtonconnect->setText(QString::fromLocal8Bit("連接"));//顯示qDebug()<<"Disconnected!"; }/*自動發送*/ void App::on_checkBox_auto_clicked(bool checked) {if(checked)//判斷自動發送是否選中{onTimeOut();//調用計時器延時發送} }/*設置定時器延時發送*/ void App::onTimeOut() {if(ui->checkBox_auto->isChecked())//判斷自動發送是否選中{static int value = 0;ui->progressBar->setValue(value++);if(value>5)//延時5秒發送一次{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[])//主函數 {QApplication a(argc, argv);App w;w.show();w.onTimeOut();return a.exec(); } 8.源碼中ui設計新增了一些內容,可以看情況刪減使用。總結
以上是生活随笔為你收集整理的【QT实现TCP和UDP协议通信(二)】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS-UITableView 中自定制
- 下一篇: zenmap使用方法