#include "udpreceiver.h" #include UdpReceiver::UdpReceiver(QObject *parent) : QObject(parent) , m_socket(new QUdpSocket(this)) , m_port(0) { connect(m_socket, &QUdpSocket::readyRead, this, &UdpReceiver::onReadyRead); } UdpReceiver::~UdpReceiver() { stop(); } bool UdpReceiver::start(quint16 port) { stop(); m_port = port; if (!m_socket->bind(QHostAddress::AnyIPv4, port, QUdpSocket::ShareAddress)) { emit errorOccurred(QString("无法绑定端口 %1: %2").arg(port).arg(m_socket->errorString())); return false; } // 设置足够大的缓冲区 m_socket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 8 * 1024 * 1024); return true; } void UdpReceiver::stop() { m_socket->close(); m_port = 0; } bool UdpReceiver::isRunning() const { return m_socket->state() == QAbstractSocket::BoundState; } void UdpReceiver::onReadyRead() { while (m_socket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(m_socket->pendingDatagramSize()); m_socket->readDatagram(datagram.data(), datagram.size()); emit dataReceived(datagram); } }