16,816
社区成员




class ReceiveUDP : public QObject
{
Q_OBJECT
private:
QString ip_String;
qint16 port_qint16;
QUdpSocket* messageReceive_UdpSocket;
public:
explicit ReceiveUDP(const QString& ip , qint16 port , QObject *parent = nullptr);
signals:
void messageFromUDP(const QString& msg);
private slots:
void receiveMessageFromUDP();
#include "ReceiveUDP.h"
ReceiveUDP::ReceiveUDP(const QString& ip , qint16 port , QObject *parent) : QObject(parent),
ip_String(ip),
port_qint16(port)
{
messageReceive_UdpSocket = new QUdpSocket(this);
messageReceive_UdpSocket->bind(QHostAddress(ip_String),port_qint16);
//messageReceive_UdpSocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption, 1);
connect(messageReceive_UdpSocket,SIGNAL(readyRead()),this,SLOT(receiveMessageFromUDP()));
}
void ReceiveUDP::receiveMessageFromUDP()
{
QString hear = tr("head+");
QByteArray datas;
while(messageReceive_UdpSocket->hasPendingDatagrams())
{
datas.resize(messageReceive_UdpSocket->pendingDatagramSize());
messageReceive_UdpSocket->readDatagram(datas.data(),datas.size());
emit messageFromUDP(QString((hear+datas)));
}
}
receiveUDP_Object = new ReceiveUDP(HOST,PORT,this);
connect(receiveUDP_Object,SIGNAL(messageFromUDP(const QString&)),this,SLOT(showMSG(const QString&)));
//这个showMSG()槽是主程序里的自定义槽,这个槽会在控制台打印接受到的QString
messageSender_UdpSocket = new QUdpSocket(this);
QByteArray msg = "Hellow World.\n";
for(int i = 0 ; i < 10 ; ++i)
messageSender_UdpSocket->writeDatagram(msg,QHostAddress(HOST),PORT);