成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解析 Qt 網絡之UDP 網絡基礎學習

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

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

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

下面我們將編寫兩個程序,一個用來發送數據報,可以叫做客戶端;另一個用來接收數據報,可以叫做服務器端,它們均應用UDP協議。這樣也就構成了所謂的C/S(客戶端/服務器)編程模型。我們會在編寫程序的過程中講解一些相關的網絡知識。

(一)發送端(客戶端)

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

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

Qt 網絡之UDP 網絡基礎學習

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

添加頭文件:#include <QtNetwork>

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

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

在構造函數中添加:sender = new QUdpSocket(this);

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

  1. void Widget::on_pushButton_clicked()  //發送廣播  
  2. {  
  3.     QByteArray datagram = “hello world!”;  
  4.     sender->writeDatagram(datagram.data(),datagram.size(),  
  5.                           QHostAddress::Broadcast,45454);  

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

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

Qt 網絡之UDP 網絡基礎學習

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

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

Qt 網絡之UDP 網絡基礎學習

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

Qt 網絡之UDP 網絡基礎學習

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

添加頭文件:#include <QtNetwork>

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

添加私有槽函數:

  1. private slots:  
  2. void processPendingDatagram(); 

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

在構造函數中:

  1. receiver = new QUdpSocket(this);  
  2. receiver->bind(45454,QUdpSocket::ShareAddress);  
  3. connect(receiver,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));  
  4. 我們在構造函數中將receiver綁定到45454端口,這個端口就是上面發送端設置的端口,二者必須一樣才能保證接收到數據報。
  5. 我們這里使用了綁定模式QUdpSocket::ShareAddress,它表明其他服務也可以綁定到這個端口上。因為當receiver發現有數據
  6. 報到達時就會發出readyRead()信號,所以我們將其和我們的數據報處理函數相關聯。  
  7. 數據報處理槽函數實現如下:  
  8. void Widget::processPendingDatagram() //處理等待的數據報  
  9. {  
  10.     while(receiver->hasPendingDatagrams())  //擁有等待的數據報  
  11.     {  
  12.         QByteArray datagram; //擁于存放接收的數據報  
  13.         datagram.resize(receiver->pendingDatagramSize());  
  14.         //讓datagram的大小為等待處理的數據報的大小,這樣才能接收到完整的數據  
  15.         receiver->readDatagram(datagram.data(),datagram.size());  
  16.         //接收數據報,將其存放到datagram中  
  17.         ui->label->setText(datagram);  
  18.         //將數據報內容顯示出來  
  19.     }  

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

Qt 網絡之UDP 網絡基礎學習

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

Qt 網絡之UDP 網絡基礎學習

如果是在linux下,你可能還需要關閉防火墻。

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

Qt 網絡之UDP 網絡基礎學習

可以看到,UDP的應用是很簡單的。我們只需要在發送端執行writeDatagram()函數進行數據報的發送,然后在接收端綁定端口,并關聯readyRead()信號和數據報處理函數即可。
 
本文章原創 www.yafeilinux.com   

小結:Qt 網絡UDP 網絡基礎學習的內容介紹完了,希望本文對你有幫助。想要繼續深入的了解更多資料。請參考:

http://mobile.51cto.com/symbian-268176.htm          Qt網絡
http://mobile.51cto.com/symbian-268170.htm           http 編程
http://mobile.51cto.com/symbian-268167_1.htm       Qt獲取網絡地址

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-27 09:47:43

2011-06-27 10:15:22

Qt 網絡 TCP

2011-06-27 10:28:45

Qt 網絡 TCP

2011-06-02 10:28:18

2011-06-02 11:21:59

Tftp

2011-06-02 14:36:19

Route

2011-06-02 10:28:15

網絡命令Arp

2011-06-02 14:36:22

Runas

2011-06-02 10:28:21

Rsh

2011-06-02 11:34:31

Nbtstat

2011-06-02 14:36:25

Netstat

2014-06-13 13:47:31

UDP

2011-06-10 12:17:52

Qt 網絡

2020-07-28 08:38:10

TCPUDP協議

2011-06-10 12:44:09

2011-06-02 10:28:11

網絡命令

2014-09-16 17:00:02

UDP

2011-06-10 13:21:00

Qt 網絡

2011-06-22 16:18:23

QT 多線程 QSocket

2019-03-29 10:31:53

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品网 | 超碰电影 | 国产成人一区二区三区久久久 | 在线观看黄视频 | 91精品成人久久 | 久久久xxx | 国产免费一区二区三区 | 日韩av中文| 日韩成人在线免费视频 | 久久综合久久自在自线精品自 | 毛片免费观看 | 国产精品国产三级国产aⅴ无密码 | 草草视频在线播放 | 亚洲精品日韩精品 | 精品一区在线 | 国产福利视频导航 | 成人亚洲综合 | 99re视频这里只有精品 | 综合国产 | 网站一区二区三区 | 在线国产一区二区 | 亚洲精品2 | 精品综合| 91大神在线资源观看无广告 | 欧美一二三四成人免费视频 | 国产一二三区在线 | 四虎影院在线免费观看 | 免费精品在线视频 | 美女在线国产 | 在线成人www免费观看视频 | 欧美亚洲成人网 | 欧美综合在线视频 | 99精品视频在线 | 毛片大全 | 日韩欧美精品 | 久久精品一区二区 | 天天夜天天操 | 国产在线观看一区二区 | 国产一区二区精品在线 | 99热.com | 中文字幕日韩欧美 |