QT實例:UDP組播通信

一、發送方

1.在pro工程文件中添加代碼

QT += core gui network

2.添加頭文件

#include <QUdpSocket>

3.在.h文件private私有變量中添加定義

QUdpSocket *m_qudpSocket;

4.在.cpp中的構造函數中添加

m_qudpSocket = new QUdpSocket();

5.添加按鈕,並將按鈕轉到槽函數clicked(),如下代碼

void MainWindow::on_pushButton_clicked()
{   
   m_qudpSocket->writeDatagram(ui->textEditSendData->toPlainText().toUtf8(),QHostAddress("127.0.0.1"),8080);           
}

6.效果圖

二、接收方

1.重複發送方的1~4步(注意兩者的socket變量不一樣)

2.構造函數中繼續添加以下代碼

m_udpSocket->bind(QHostAddress::AnyIPv4,8080,QUdpSocket::ShareAddress);//綁定所有ip來接收組播組信息    
m_udpSocket->joinMulticastGroup(QHostAddress("127.0.0.1"));//加入組播組ip  
m_udpSocket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption,1024*1024*8);//設置緩衝區    
connect(m_udpSocket,SIGNAL(readyRead()),this,SLOT(RecvData()));//連接接收信號槽

3.添加槽函數代碼

void MainWindow::RecvData()
{    
//數據報到來,readyRead()信號被產生,此時hasPendingDatagrams()函數返回真(true)。    
//調用pendingDatagramSize()獲取第一個數據報的長度(size),readDatagram()讀取數據報內容    
   while (m_udpSocket->hasPendingDatagrams())           
    {               
      QByteArray datagram;               
      datagram.resize(m_udpSocket->pendingDatagramSize());               
      m_udpSocket->readDatagram(datagram.data(),datagram.size());
      QString strRecvData = datagram;
      ui->textEditRecvData->setPlainText(strRecvData);
      qDebug()<<datagram.data();           
   }
}

4.然後在private slots中添加槽函數聲明

 void RecvData();

注意:127.0.0.1是迴環地址,當接收方和發送方的IP和端口相同時,接收方可以收到發送方發來的消息,用以驗證。

參考文檔:QT進行UDP通信的學習(單播,組播,廣播)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章