一、发送方
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和端口相同时,接收方可以收到发送方发来的消息,用以验证。