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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

Qt網(wǎng)絡(luò)編程-簡(jiǎn)易版UDP單播通信入門Demo(3)🦖

文章目錄

  • Qt網(wǎng)絡(luò)編程-簡(jiǎn)易版UDP單播通信入門Demo(3)🦖
    • 1、概述🐻
    • 2、傳統(tǒng)UDP單播通信流程圖🐻???
    • 3、 關(guān)鍵信號(hào)🐼
    • 4、 關(guān)鍵函數(shù) 🦘
    • 5、主要代碼🐧
    • 6、實(shí)現(xiàn)效果🐦
    • 7、源代碼🐸

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

1、概述🐻

使用QUdpSocket實(shí)現(xiàn)傳統(tǒng)UDP單播通信功能,十分簡(jiǎn)易的入門Demo

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

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

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

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

QUdpSocket分別可以采用傳統(tǒng)UDP通信步驟類TCP的UDP通信步驟兩種實(shí)現(xiàn)方式實(shí)現(xiàn)單播通信功能;

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

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

  • 使用傳統(tǒng)UDP通信步驟實(shí)現(xiàn)UDP單播通信;
  • 數(shù)據(jù)接收功能;
  • 數(shù)據(jù)發(fā)送功能。

2、傳統(tǒng)UDP單播通信流程圖🐻???

  • UDP沒有所謂的服務(wù)器與客戶端,只需雙方綁定對(duì)方的Ip和端口號(hào)即可。
  • 綁定對(duì)方IP、端口是用于發(fā)送數(shù)據(jù);
  • 綁定本地端口是便于對(duì)方發(fā)送數(shù)據(jù);
  • 如果沒有綁定本地端口,則會(huì)自動(dòng)分配一個(gè)端口號(hào),并不影響通信。

3、 關(guān)鍵信號(hào)🐼

信號(hào)說明
readyRead有可讀數(shù)據(jù)時(shí)發(fā)出此信號(hào)

4、 關(guān)鍵函數(shù) 🦘

函數(shù)名說明
state判斷QUdpSocket當(dāng)前狀態(tài),BoundState已綁定本地端口
bind綁定本地IP、端口
writeDatagram發(fā)送數(shù)據(jù)報(bào)
receiveDatagram讀取數(shù)據(jù)報(bào)
abort關(guān)閉套接字連接(解除綁定的端口號(hào))

5、主要代碼🐧

  • 注意:在.pro文件里添加QT += network,否則編譯失敗。
  • .h文件
/******************************************************************************* @文件名 simpleudpsocket1.h* @功能 簡(jiǎn)易的UDP通信功能Demo,第一種實(shí)現(xiàn)方式,傳統(tǒng)UDP通信方式。** @開發(fā)者 mhf* @郵箱 1603291350@qq.com* @時(shí)間 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通信對(duì)象 };#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("簡(jiǎn)易版?zhèn)鹘y(tǒng)方式UDP單播通信Demo");m_udpSocket = new QUdpSocket(this);connect(m_udpSocket, &QUdpSocket::readyRead, this, &SimpleUdpSocket1::on_readyRead); // 當(dāng)有可讀數(shù)據(jù)時(shí)發(fā)出readyRead信號(hào) }SimpleUdpSocket1::~SimpleUdpSocket1() {delete ui; }/*** @brief 讀取UDP數(shù)據(jù)報(bào)*/ void SimpleUdpSocket1::on_readyRead() {QNetworkDatagram datagram = m_udpSocket->receiveDatagram(); // 讀取數(shù)據(jù),這里需要添加qnetworkdatagram.h頭文件ui->text_recv->append(datagram.data()); // 顯示讀取到的數(shù)據(jù) }/*** @brief 開始綁定綁定IP端口,用于接收數(shù)據(jù)*/ void SimpleUdpSocket1::on_but_connect_clicked() {if(m_udpSocket->state() != QAbstractSocket::BoundState) // 如果未綁定本地ip、端口(第一種方式udp狀態(tài)只到BoundState){bool ret = m_udpSocket->bind(ui->spin_localPort->value()); // 綁定本地地址和端口號(hào)if(ret){qInfo() << "綁定本地地址成功!";ui->but_connect->setText("關(guān)閉");}else{qWarning() << "綁定本地地址失敗!";}}else{m_udpSocket->abort();ui->but_connect->setText("打開");} }/*** @brief 發(fā)送數(shù)據(jù),只要有目標(biāo)IP、端口就可以發(fā)送,與是否綁定本地IP端口無關(guān)* 如果發(fā)送時(shí)未綁定本地端口號(hào),則默認(rèn)分配一個(gè),并將udp狀態(tài)置為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("發(fā)送數(shù)據(jù)長度:%1").arg(len); }

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

7、源代碼🐸

gitee
github

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

總結(jié)

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

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