国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666)

這篇具有很好參考價值的文章主要介紹了嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

鏈接:https://pan.baidu.com/s/1-u7GvgM0TLuiy9z7LYQ80Q?pwd=1688
提取碼:1688

在Qt中提供了QUdpSocket 類來進行UDP數(shù)據(jù)報(datagrams)的發(fā)送和接收。這里我們還要了解一個名詞Socket,也就是常說的“套接字”。

Qt 網(wǎng)絡(luò)之UDP 網(wǎng)絡(luò)基礎(chǔ)學(xué)習(xí)是本文要介紹的內(nèi)容,UDP(User Datagram Protocol即用戶數(shù)據(jù)報協(xié)議)是一個輕量級的,不可靠的,面向數(shù)據(jù)報的無連接協(xié)議。對于UDP我們不再進行過多介紹,如果你對UDP不是很了解,而且不知道它有什么用,那么我們這里就舉個簡單的例子:我們現(xiàn)在幾乎每個人都使用的騰訊QQ,其聊天時就是使用UDP協(xié)議進行消息發(fā)送的。就像QQ那樣,當(dāng)有很多用戶,發(fā)送的大部分都是短消息,要求能及時響應(yīng),并且對安全性要求不是很高的情況下使用UDP協(xié)議。

在Qt中提供了QUdpSocket 類來進行UDP數(shù)據(jù)報(datagrams)的發(fā)送和接收。這里我們還要了解一個名詞Socket,也就是常說的“套接字”。 Socket簡單地說,就是一個IP地址加一個port端口。因為我們要傳輸數(shù)據(jù),就要知道往哪個機子上傳送,而IP地址確定了一臺主機,但是這臺機子上可能運行著各種各樣的網(wǎng)絡(luò)程序,我們要往哪個程序中發(fā)送呢?這時就要使用一個端口來指定UDP程序。所以說,Socket指明了數(shù)據(jù)報傳輸?shù)穆窂健?/p>

下面我們將編寫兩個程序,一個用來發(fā)送數(shù)據(jù)報,可以叫做客戶端;另一個用來接收數(shù)據(jù)報,可以叫做服務(wù)器端,它們均應(yīng)用UDP協(xié)議。這樣也就構(gòu)成了所謂的C/S(客戶端/服務(wù)器)編程模型。我們會在編寫程序的過程中講解一些相關(guān)的網(wǎng)絡(luò)知識。

(一)發(fā)送端(客戶端)

1、我們新建Qt4 Gui Application,工程名為“udpSender”,選中QtNetwork模塊,Base class選擇QWidget。

2、我們在widget.ui文件中,往界面上添加一個Push Button,更改其顯示文本為“開始廣播”,然后進入其單擊事件槽函數(shù)。

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666),嵌入式培訓(xùn)課程筆記,筆記,c++,qt

3、我們在widget.h文件中更改。

添加頭文件:#include <QtNetwork>

添加private私有對象:QUdpSocket *sender;

4、我們在widget.cpp中進行更改。

在構(gòu)造函數(shù)中添加:sender = new QUdpSocket(this);

更改“開始廣播”按鈕的單擊事件槽函數(shù):

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666),嵌入式培訓(xùn)課程筆記,筆記,c++,qt

void Widget::on_pushButton_clicked()? //發(fā)送廣播?

{?

??? QByteArray datagram = “hello world!”;?

??? sender->writeDatagram(datagram.data(),datagram.size(),?

????????????????????????? QHostAddress::Broadcast,45454);?

}

這里我們定義了一個QByteArray類型的數(shù)據(jù)報datagram,其內(nèi)容為“hello world!”。然后我們使用QUdpSocket類的writeDatagram()函數(shù)來發(fā)送數(shù)據(jù)報,這個函數(shù)有四個參數(shù),分別是數(shù)據(jù)報的內(nèi)容,數(shù)據(jù)報的大小,主機地址和端口號。對于數(shù)據(jù)報的大小,它根據(jù)平臺的不同而不同,但是這里建議不要超過512字節(jié)。這里我們使用了廣播地址QHostAddress::Broadcast,這樣就可以同時給網(wǎng)絡(luò)中所有的主機發(fā)送數(shù)據(jù)報了。對于端口號,它是可以隨意指定的,但是一般1024以下的端口號通常屬于保留端口號,所以我們最好使用大于1024的端口,最大為65535。我們這里使用了45454這個端口號,一定要注意,在下面要講的服務(wù)器程序中,也要使用相同的端口號。

5.發(fā)送端就這么簡單,我們運行程序,效果如下。

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666),嵌入式培訓(xùn)課程筆記,筆記,c++,qt

(二)接收端(服務(wù)器端)

1、我們新建Qt4 Gui Application,工程名為“udpReceiver”,選中QtNetwork模塊,Base class選擇QWidget。此時工程文件列表中應(yīng)包含兩個工程,如下圖。

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666),嵌入式培訓(xùn)課程筆記,筆記,c++,qt

2、我們在udpReceiver工程中的widget.ui文件中,向界面上添加一個Label部件,更改其顯示文本為“等待接收數(shù)據(jù)!”,效果如下。

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666),嵌入式培訓(xùn)課程筆記,筆記,c++,qt

3、我們在udpReceiver工程中的widget.h文件中更改。

添加頭文件:#include <QtNetwork>

添加private私有對象:QUdpSocket *receiver;

添加私有槽函數(shù):

private slots:?

void processPendingDatagram();

4、我們在udpReceiver工程中的widget.cpp文件中更改。

在構(gòu)造函數(shù)中:

receiver = new QUdpSocket(this);?

receiver->bind(45454,QUdpSocket::ShareAddress);?

connect(receiver,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));?

我們在構(gòu)造函數(shù)中將receiver綁定到45454端口,這個端口就是上面發(fā)送端設(shè)置的端口,二者必須一樣才能保證接收到數(shù)據(jù)報。

???????????? 我們這里使用了綁定模式QUdpSocket::ShareAddress,它表明其他服務(wù)也可以綁定到這個端口上。因為當(dāng)receiver發(fā)現(xiàn)有數(shù)據(jù)

???????????? 報到達時就會發(fā)出readyRead()信號,所以我們將其和我們的數(shù)據(jù)報處理函數(shù)相關(guān)聯(lián)。?

數(shù)據(jù)報處理槽函數(shù)實現(xiàn)如下:?

void Widget::processPendingDatagram() //處理等待的數(shù)據(jù)報?

{?

??? while(receiver->hasPendingDatagrams())? //擁有等待的數(shù)據(jù)報?

??? {?

??????? QByteArray datagram; //擁于存放接收的數(shù)據(jù)報?

??????? datagram.resize(receiver->pendingDatagramSize());?

??????? //讓datagram的大小為等待處理的數(shù)據(jù)報的大小,這樣才能接收到完整的數(shù)據(jù)?

??????? receiver->readDatagram(datagram.data(),datagram.size());?

??????? //接收數(shù)據(jù)報,將其存放到datagram中?

??????? ui->label->setText(datagram);?

??????? //將數(shù)據(jù)報內(nèi)容顯示出來?

??? }?

}

5、我們在工程列表中udpReceiver工程上點擊鼠標右鍵,在彈出的菜單上選擇run菜單來運行該工程。

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666),嵌入式培訓(xùn)課程筆記,筆記,c++,qt

6、第一次運行該程序時,系統(tǒng)可能會提示警告,我們選擇“解除阻止”。

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666),嵌入式培訓(xùn)課程筆記,筆記,c++,qt

如果是在linux下,你可能還需要關(guān)閉防火墻。

7、我們同時再運行udpSender程序。然后點擊其上的“發(fā)送廣播”按鈕,這時會在udpReceiver上顯示數(shù)據(jù)報的內(nèi)容。效果如下。

嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666),嵌入式培訓(xùn)課程筆記,筆記,c++,qt

可以看到,UDP的應(yīng)用是很簡單的。我們只需要在發(fā)送端執(zhí)行writeDatagram()函數(shù)進行數(shù)據(jù)報的發(fā)送,然后在接收端綁定端口,并關(guān)聯(lián)readyRead()信號和數(shù)據(jù)報處理函數(shù)即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-824547.html

到了這里,關(guān)于嵌入式培訓(xùn)機構(gòu)四個月實訓(xùn)課程筆記(完整版)-C++和QT編程第六天-Qt UDP編程(物聯(lián)技術(shù)666)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包