一、發送方
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和端口相同時,接收方可以收到發送方發來的消息,用以驗證。