亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt實現(xiàn)簡單UDP通信

 更新時間:2022年08月18日 15:04:37   作者:喝水怪~  
這篇文章主要為大家詳細介紹了Qt實現(xiàn)簡單UDP通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Qt簡單實現(xiàn)UDP通信的具體代碼,供大家參考,具體內(nèi)容如下

標簽(空格分隔): udp通信、Qt

一、UDP簡介

1)UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)

UDP是一個輕量級、不可靠、面向數(shù)據(jù)報的、無連接的傳輸層協(xié)議,多用于可靠性要求不嚴格,不是非常重要的傳輸,如直播、視頻會議等等。

2)Qt中QUdpSocket類繼承自QAbstractSocket,用來發(fā)送和接收UDP數(shù)據(jù)報,”Socket”即套接字,套接字即IP地址+端口號。其中IP地址指定了網(wǎng)絡(luò)中的一臺主機,二端口號則指定了該主機上的一個應(yīng)用程序,端口號只具有本地意義,使用套接字即可實現(xiàn)網(wǎng)絡(luò)上的兩個應(yīng)用程序之間的通信。

3)QUdpSocket支持IPv4廣播,要廣播數(shù)據(jù)報,則只需發(fā)送到一個特殊的地址QHostAddress::Broadcast(即255.255.255.255),數(shù)據(jù)報一般建議發(fā)送字節(jié)數(shù)小于512字節(jié)。端口號選擇1024-65535(1024以下的常用作保留端口號,如FTP常用端口號21,Telnet常用端口號23,DNS域名服務(wù)器常用端口53等)。

二、具體Demo

發(fā)送端:

  • 新建Qt Widgets Application,用作udp發(fā)送端,繼承自Qwidget類即可,設(shè)計ui界面,用于發(fā)送信息,界面如下:

  • 打開pro文件,做如下修改,支持網(wǎng)絡(luò)編程,接收端也需做如下修改

  • 添加發(fā)送端udpSocket以及按鈕的點擊信號
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QUdpSocket>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
? ? Q_OBJECT

public:
? ? Widget(QWidget *parent = nullptr);
? ? ~Widget();

private slots:
? ? void on_pushButton_clicked(); ? //按鈕點擊信號

private:
? ? Ui::Widget *ui;
? ? QUdpSocket* m_sender; ? //udp發(fā)送端
};
#endif // WIDGET_H
  • 點擊信號對應(yīng)槽函數(shù)的實現(xiàn):
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
? ? : QWidget(parent)
? ? , ui(new Ui::Widget)
{
? ? ui->setupUi(this);
? ? m_sender=new QUdpSocket(this);
}

Widget::~Widget()
{
? ? delete ui;
}

void Widget::on_pushButton_clicked()
{
? ? QByteArray dataGram=ui->lineEdit->text().toUtf8();
? ? m_sender->writeDatagram(dataGram.data(),
? ? ? ? ? ? ? ? ? ? ? ? ? ? dataGram.size(),
? ? ? ? ? ? ? ? ? ? ? ? ? ? QHostAddress::Broadcast, ? ?//udp廣播地址
? ? ? ? ? ? ? ? ? ? ? ? ? ? 6666);
}

接受端:

  • 再新建Qt Widgets Application項目,用作udp接收端,繼承自Qwidget類即可,設(shè)計ui界面,用標簽部件來顯示接收到的信息,界面如下:

  • 跟發(fā)送端一樣,在pro文件中添加支持網(wǎng)絡(luò)編程的模塊 network
  • 添加接收端udpSocket,如下:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QUdpSocket>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
? ? Q_OBJECT

public:
? ? Widget(QWidget *parent = nullptr);
? ? ~Widget();
private slots:
? ? void processData();
private:
? ? Ui::Widget *ui;
? ? QUdpSocket* m_receiver; //udp接受端
};
#endif // WIDGET_H
  • 編輯接收端源文件:
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
? ? : QWidget(parent)
? ? , ui(new Ui::Widget)
{
? ? ui->setupUi(this);
? ? m_receiver=new QUdpSocket(this);
? ? //綁定發(fā)送端,ShareAddress允許多接收端綁定6666端口
? ? m_receiver->bind(6666,QUdpSocket::ShareAddress);
? ? //當接收端接收到數(shù)據(jù)時,就會發(fā)送readRead信號
? ? connect(m_receiver,&QUdpSocket::readyRead,this,&Widget::processData);
}

Widget::~Widget()
{
? ? delete ui;
}

void Widget::processData()
{
? ? QString strData;
? ? //有未處理的數(shù)據(jù)報
? ? while(m_receiver->hasPendingDatagrams()){
? ? ? ? QByteArray dataGram;
? ? ? ? //讀取的數(shù)據(jù)報大小
? ? ? ? dataGram.resize(m_receiver->pendingDatagramSize());
? ? ? ? m_receiver->readDatagram(dataGram.data(),dataGram.size());
? ? ? ? ui->dataLabel->setText(dataGram); ? //將接收到的數(shù)據(jù)顯示到標簽上
? ? }

}

三、運行效果

  • 運行發(fā)送端應(yīng)用程序,再打開接收端應(yīng)用程序;
  • 在發(fā)送端編輯框輸入數(shù)據(jù),點擊廣播,觀察接收端的情況,結(jié)果如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • VSCode配置C語言環(huán)境的方法

    VSCode配置C語言環(huán)境的方法

    這篇文章主要介紹了VSCode配置C語言環(huán)境的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C++實現(xiàn)一個簡單的SOAP客戶端

    C++實現(xiàn)一個簡單的SOAP客戶端

    這篇文章主要介紹了C++實現(xiàn)一個簡單的SOAP客戶端,在C++中,一般使用gSOAP來實現(xiàn)客戶端、服務(wù)端,下面一起進入文章了解具體內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • C語言動態(tài)內(nèi)存管理分析總結(jié)

    C語言動態(tài)內(nèi)存管理分析總結(jié)

    C語言中開辟內(nèi)存有很多種方式,目前我們最常用的也就是數(shù)組,但數(shù)組是在我們用到他之前就得設(shè)定好它的長度,有時很不方便。隨意我們來探究動態(tài)內(nèi)存管理
    2021-11-11
  • C語言常見的指針筆試題解析

    C語言常見的指針筆試題解析

    在我們學(xué)習(xí)指針之后,應(yīng)該在實際應(yīng)用中去理解和掌握它,畢竟實踐才是檢驗真理的唯一標準,我們以后在找工作的過程中免不了會遇到與指針相關(guān)的試題,本篇文章可以幫助我們提前了解一些常見的指針考點,需要的可以了解一下
    2022-10-10
  • C++ Boost Intrusive庫示例精講

    C++ Boost Intrusive庫示例精講

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C語言自定義函數(shù)的實現(xiàn)

    C語言自定義函數(shù)的實現(xiàn)

    這篇文章主要介紹了C語言自定義函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語言清楚了解指針的使用

    C語言清楚了解指針的使用

    C語言這門課程在計算機的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-06-06
  • C++簡明圖解分析靜態(tài)成員與單例設(shè)計模式

    C++簡明圖解分析靜態(tài)成員與單例設(shè)計模式

    與靜態(tài)數(shù)據(jù)成員不同,靜態(tài)成員函數(shù)的作用不是為了對象之間的溝通,而是為了能處理靜態(tài)數(shù)據(jù)成員,靜態(tài)成員函數(shù)沒有this指針。既然它沒有指向某一對象,也就無法對一個對象中的非靜態(tài)成員進行默認訪問
    2022-06-06
  • C++的static關(guān)鍵字及變量存儲位置總結(jié)

    C++的static關(guān)鍵字及變量存儲位置總結(jié)

    今天看博文時,看到了c++的static關(guān)鍵字的一些總結(jié),還涉及到了一些代碼的存儲位置;接下來為您詳細呈現(xiàn)
    2012-11-11
  • c++ 前自增/后自增操作符效率分析

    c++ 前自增/后自增操作符效率分析

    這篇文章主要介紹了c++ 前自增/后自增操作符效率分析,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2021-01-01

最新評論