增加组播组件接收功能

This commit is contained in:
hehaoyang 2024-01-12 18:43:14 +08:00
parent ffa89d0bef
commit 46e7e79987
3 changed files with 95 additions and 54 deletions

17
.gitignore vendored
View File

@ -1,8 +1,9 @@
debug/* debug/*
release/* release/*
.qmake.stash .qmake.stash
HxUtils.pro.* HxUtils.pro.*
Makefile* Makefile*
*.Debug *.Debug
*.Release *.Release
*.TMP *.TMP
._*

View File

@ -1,17 +1,44 @@
#include "HxBroadcast.h" #include "HxBroadcast.h"
#include <QHostAddress> #include <QHostAddress>
int HxBroadcast::port = 0; HxBroadcast *broadcast = nullptr;
QUdpSocket *HxBroadcast::socket = nullptr;
HxBroadcast* HxBroadcast::context() { return broadcast; }
void HxBroadcast::initialization(int port)
{ void HxBroadcast::initialization(int port)
HxBroadcast::port = port; {
HxBroadcast::socket = new QUdpSocket(); broadcast = new HxBroadcast();
}
broadcast->port = port;
void HxBroadcast::publish(QString message) broadcast->socket = new QUdpSocket();
{ connect(broadcast->socket, &QUdpSocket::readyRead, broadcast, &HxBroadcast::receive_ready_read);
socket->writeDatagram(message.toUtf8(), QHostAddress::Broadcast, port); connect(broadcast, &HxBroadcast::publish_event, broadcast, &HxBroadcast::publish_achieve);
} }
void HxBroadcast::publish(QString message)
{
emit broadcast->publish_event(message);
}
void HxBroadcast::publish_achieve(QString message)
{
socket->writeDatagram(message.toUtf8(), QHostAddress::Broadcast, broadcast->port);
}
void HxBroadcast::receive_ready_read()
{
/* 拥有等待的数据报 */
while (socket->hasPendingDatagrams())
{
QByteArray datagram;
/* 让datagram的大小为等待处理的数据报的大小这样才能接收到完整的数据 */
datagram.resize(socket->pendingDatagramSize());
/* 接收数据报将其存放到datagram中*/
socket->readDatagram(datagram.data(), datagram.size());
emit broadcast->receive_event(QString::fromLocal8Bit(datagram));
}
}

View File

@ -1,29 +1,42 @@
#ifndef HXBROADCAST_H #ifndef HXBROADCAST_H
#define HXBROADCAST_H #define HXBROADCAST_H
#include <QObject> #include <QObject>
#include <QUdpSocket> #include <QUdpSocket>
class HxBroadcast class HxBroadcast : public QObject
{ {
public: Q_OBJECT
/** public:
* @brief static HxBroadcast* context();
*
* @param port 广 /**
*/ * @brief
static void initialization(int port); *
* @param port 广
/** */
* @brief static void initialization(int port);
*
* @param message /**
*/ * @brief
static void publish(QString message); *
* @param message
private: */
static int port; static void publish(QString message);
static QUdpSocket *socket;
}; private:
void publish_achieve(QString message);
#endif // HXBROADCAST_H
signals:
void publish_event(QString message);
void receive_event(QString data);
private slots:
void receive_ready_read();
private:
int port;
QUdpSocket *socket;
};
#endif // HXBROADCAST_H