Qt 利用UDP進行通信


一、UDP的特點

UDP(用戶數據報協議)是一種簡單輕量級、不可靠、面向數據報,無連接的傳輸層協議。而TCP/IP協議卻是有連接的

二、UDP適合應用的幾種情況

1、網絡數據大多為短消息

2、擁有大量客戶端

3、對數據安全性無特殊要求

4、網絡負擔非常重,但對響應速度要求高。

三、利用UDP進行網絡通信

因為upd是無連接的,所以兩個通信設備之間不需要建立連接,只要知道對方的IP地址和端口號就行了。

我們首先創建一個項目,這個項目需要用到ui界面,所以我們還是使用Qtdesigner,並且還要給它布好局。

首先我們需要綁定端口號,如果在同一台電腦上測試IP地址可以不需要綁定,綁定的時候我們用到bind()函數。

例:

udpsocket->bind(8000);

接收數據

當接收到數據的時候,socket會自動觸發readyRead這個信號,所以需要寫一個參函數來處理這個信號,也就是讀取socket接收到的數據。

接收數據的時候我們需要用到這個一個函數

readDatagram(char *data, qint64 maxSize, QHostAddress *address = Q_NULLPTR, quint16 *port = Q_NULLPTR)

這個函數的參數的含義如下

1、將讀取的內容存放在data中

2、讀取的長度

3、對方的ip地址

4、對方的端口號

最后將讀取的內容顯示在文本編輯框里就可以了。

發送數據

發送數據的步驟和讀取數據的步驟差不多的,首先需要獲取界面中的端口,ip地址和文本編輯框中的內容,然后通過writeDatagram()這個函數來發送。

writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)

這個函數的參數含義如下

1、需要發送的消息

2、對方的IP地址

3、對方的端口號

四、發送和接收的代碼

發送

 1 void Widget::on_pushButtonwrite_clicked()  2 {  3     //獲取對方的端口號和ip
 4     QString ip = ui->lineEditip->text();  5     quint16 port = ui->lineEditport->text().toInt();  6  
 7     //獲取文本框的內容
 8     QString str = ui->textEdit->toPlainText();  9  
10     //將信息發送給指定的ip
11     udpsocket->writeDatagram(str.toUtf8(), (QHostAddress)ip, port); 12 }

接收

 1 void Widget::readData()  2 {  3     char buf[1024] = {0};  4     QHostAddress addr; //對方的ip
 5     quint16 port; //對方的端口
 6  qint64 len;  7     len = udpsocket->readDatagram(buf, sizeof(buf), &addr, &port);  8  {  9         if(len > 0) 10  { 11             QString str = QString("[%1:%2] %3").arg(addr.toString()).arg(port).arg(buf); 12             ui->textEdit->setText(str); 13  } 14  } 15 }

編譯運行之后如下圖

我這里因為需要兩個窗口進行通信,所以將另一個程序的端口號改成了8888。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM