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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt网络编程-简易版UDP单播通信入门Demo(3)

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt网络编程-简易版UDP单播通信入门Demo(3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt網絡編程-簡易版UDP單播通信入門Demo(3)🦖

文章目錄

  • Qt網絡編程-簡易版UDP單播通信入門Demo(3)🦖
    • 1、概述🐻
    • 2、傳統UDP單播通信流程圖🐻???
    • 3、 關鍵信號🐼
    • 4、 關鍵函數 🦘
    • 5、主要代碼🐧
    • 6、實現效果🐦
    • 7、源代碼🐸

更多精彩內容
👉個人內容分類匯總 👈
簡易版
👉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、概述🐻

使用QUdpSocket實現傳統UDP單播通信功能,十分簡易的入門Demo

第一,絕對不意氣用事;

第二,絕對不放過任何一個注釋;

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

為了便于學習,在這個Demo里會盡可能簡單的實現UDP單播通信功能,盡可能少的引入其它功能,只保留了基本功能,所以可能會有一些bug。

QUdpSocket分別可以采用傳統UDP通信步驟類TCP的UDP通信步驟兩種實現方式實現單播通信功能;

  • 使用傳統UDP通信步驟不用綁定本地端口、目標IP和目標端口號就可以進行通信,只需要在發送數據時指定目標IP和目標端口號,步驟較為簡單,用到的函數和信號比第二種方法少;
  • 使用類TCP的UDP通信步驟需要使用connectToHost函數連接(綁定)目標IP目標端口號,步驟較為復雜,用到的函數和信號比傳統方法多,但是步驟、函數和TCP通信類似,便于后續復用TCP、UDP通信功能代碼;

實現功能:

  • 使用傳統UDP通信步驟實現UDP單播通信;
  • 數據接收功能;
  • 數據發送功能。

2、傳統UDP單播通信流程圖🐻???

  • UDP沒有所謂的服務器與客戶端,只需雙方綁定對方的Ip和端口號即可。
  • 綁定對方IP、端口是用于發送數據;
  • 綁定本地端口是便于對方發送數據;
  • 如果沒有綁定本地端口,則會自動分配一個端口號,并不影響通信。

3、 關鍵信號🐼

信號說明
readyRead有可讀數據時發出此信號

4、 關鍵函數 🦘

函數名說明
state判斷QUdpSocket當前狀態,BoundState已綁定本地端口
bind綁定本地IP、端口
writeDatagram發送數據報
receiveDatagram讀取數據報
abort關閉套接字連接(解除綁定的端口號)

5、主要代碼🐧

  • 注意:在.pro文件里添加QT += network,否則編譯失敗。
  • .h文件
/******************************************************************************* @文件名 simpleudpsocket1.h* @功能 簡易的UDP通信功能Demo,第一種實現方式,傳統UDP通信方式。** @開發者 mhf* @郵箱 1603291350@qq.com* @時間 2022/04/17* @備注*****************************************************************************/ #ifndef SIMPLEUDPSOCKET1_H #define SIMPLEUDPSOCKET1_H#include <QWidget> #include <QUdpSocket>namespace Ui { class SimpleUdpSocket1; }class SimpleUdpSocket1 : public QWidget {Q_OBJECTpublic:explicit SimpleUdpSocket1(QWidget *parent = nullptr);~SimpleUdpSocket1();private slots:void on_readyRead();void on_but_connect_clicked();void on_but_send_clicked();private:Ui::SimpleUdpSocket1 *ui;QUdpSocket* m_udpSocket = nullptr; // UDP通信對象 };#endif // SIMPLEUDPSOCKET1_H
  • .cpp文件
#include "simpleudpsocket1.h" #include "ui_simpleudpsocket1.h"#include <qnetworkdatagram.h>SimpleUdpSocket1::SimpleUdpSocket1(QWidget *parent) :QWidget(parent),ui(new Ui::SimpleUdpSocket1) {ui->setupUi(this);this->setWindowTitle("簡易版傳統方式UDP單播通信Demo");m_udpSocket = new QUdpSocket(this);connect(m_udpSocket, &QUdpSocket::readyRead, this, &SimpleUdpSocket1::on_readyRead); // 當有可讀數據時發出readyRead信號 }SimpleUdpSocket1::~SimpleUdpSocket1() {delete ui; }/*** @brief 讀取UDP數據報*/ void SimpleUdpSocket1::on_readyRead() {QNetworkDatagram datagram = m_udpSocket->receiveDatagram(); // 讀取數據,這里需要添加qnetworkdatagram.h頭文件ui->text_recv->append(datagram.data()); // 顯示讀取到的數據 }/*** @brief 開始綁定綁定IP端口,用于接收數據*/ void SimpleUdpSocket1::on_but_connect_clicked() {if(m_udpSocket->state() != QAbstractSocket::BoundState) // 如果未綁定本地ip、端口(第一種方式udp狀態只到BoundState){bool ret = m_udpSocket->bind(ui->spin_localPort->value()); // 綁定本地地址和端口號if(ret){qInfo() << "綁定本地地址成功!";ui->but_connect->setText("關閉");}else{qWarning() << "綁定本地地址失敗!";}}else{m_udpSocket->abort();ui->but_connect->setText("打開");} }/*** @brief 發送數據,只要有目標IP、端口就可以發送,與是否綁定本地IP端口無關* 如果發送時未綁定本地端口號,則默認分配一個,并將udp狀態置為BoundState*/ void SimpleUdpSocket1::on_but_send_clicked() {QString str = ui->text_send->toPlainText();qint64 len = m_udpSocket->writeDatagram(str.toUtf8(), QHostAddress(ui->line_peerAddress->text()), ui->spin_peerPort->value());qInfo() << QString("發送數據長度:%1").arg(len); }

6、實現效果🐦

7、源代碼🐸

gitee
github

🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞🤞

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。