UDPSender.h
#ifndef UDPSENDER_H
#define UDPSENDER_H
#include <QObject>
class QTimer;
class QUdpSocket;
class UDPSender : public QObject
{
Q_OBJECT
public:
explicit UDPSender(QObject *parent = 0);
~UDPSender();
signals:
public slots:
void startBroadcasting();
void broadcastDatagram();
private:
QUdpSocket *udpSocket;
QTimer *timer;
int messageNo;
};
#endif // UDPSENDER_H
UDPSender.cpp
#include "udpsender.h"
#include <QtNetwork>
#include<QTimer>
#include<QDebug>
UDPSender::UDPSender(QObject *parent) : QObject(parent)
{
timer = new QTimer(this);
udpSocket = new QUdpSocket(this);
messageNo = 1;
connect(timer, SIGNAL(timeout()), this, SLOT(broadcastDatagram()));
}
void UDPSender::startBroadcasting()
{
timer->start(1000);
}
void UDPSender::broadcastDatagram()
{
QByteArray datagram = "Broadcast message " + QByteArray::number(messageNo);
udpSocket->writeDatagram(datagram.data(), datagram.size(),
QHostAddress::Broadcast, 45454);
qDebug()<<tr("%1 broadcast message: \"%2\"").arg(QHostInfo::localHostName(),datagram.data());
++messageNo;
}
UDPSender::~UDPSender()
{
}
main.cpp
#include <QCoreApplication>
#include<udpsender.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
UDPSender s;
s.startBroadcasting();
return a.exec();
}
UDPReciver.h
#ifndef UDPRECIVER_H
#define UDPRECIVER_H
#include <QObject>
class QUdpSocket;
class UDPReciver : public QObject
{
Q_OBJECT
public:
explicit UDPReciver(QObject *parent = 0);
~UDPReciver();
private:
QUdpSocket *udpSocket;
public slots:
void processPendingDatagrams();
};
#endif // UDPRECIVER_H
UDPReciver.cpp
#include "udpreciver.h"
#include <QtNetwork>
#include<QDebug>
UDPReciver::UDPReciver(QObject *parent) : QObject(parent)
{
udpSocket = new QUdpSocket(this);
udpSocket->bind(45454, QUdpSocket::ShareAddress);
connect(udpSocket, SIGNAL(readyRead()),
this, SLOT(processPendingDatagrams()));
}
void UDPReciver::processPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
qDebug()<<tr("Received datagram: \"%1\"").arg(datagram.data())<<tr("from:%1").arg(udpSocket->localAddress().toString());
}
}
UDPReciver::~UDPReciver()
{
}
main.cpp
#include <QCoreApplication>
#include "udpreciver.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
UDPReciver s;
return a.exec();
}