Я пытаюсь разработать приемник датаграмм UDP для чтения пакетов с сервера UDP, которые обновляют информацию через датаграммы UDP. Я хочу получать датаграммы и после обновления данных считывать полезную нагрузку. Я последовал примеру Qt Tutorial для разработки многоадресного приемника. Я просто скопировал код, но хотя пример получает и читает дейтаграмму, тот же код в моем приложении этого не делает. Работать не хочет. В чем я ошибаюсь?
вот код класса, который я разработал:
UDPDataReceiver.h
class UDPDataReceiver: public QObject
{
Q_OBJECT
public:
explicit UDPDataReceiver(QObject *parent = nullptr);
public slots:
void readPendingDatagrams();
private:
QUdpSocket m_socket;
QHostAddress groupAddress4;
};
UDPDataReceiver. cpp
UDPDataReceiver::UDPDataReceiver(QObject *parent) : QObject(parent),
groupAddress4(QStringLiteral("234.5.6.7"))
{
const QHostAddress &localhost = QHostAddress(QHostAddress::LocalHost);
// for (const QHostAddress &address: QNetworkInterface::allAddresses()) {
// if (address.protocol() == QAbstractSocket::IPv4Protocol && address != localhost)
// qDebug() << address.toString();
// }
bool bound = m_socket.bind(localhost, 2471, QUdpSocket::ShareAddress);
bool joined = m_socket.joinMulticastGroup(groupAddress4);
connect(&m_socket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
}
void UDPDataReceiver::readPendingDatagrams()
{
QByteArray datagram;
while (m_socket.hasPendingDatagrams()) {
datagram.resize(int(m_socket.pendingDatagramSize()));
m_socket.readDatagram(datagram.data(), datagram.size());
qDebug()<<datagram.constData()<<"Example implementation";
}
}
В конструкторе моего класса MainWindow я вызываю следующий код для создания экземпляра получателя.
dataReceiver = new UDPDataReceiver(this);
Попытка запустить пример Qt многоадресного получателя (https://doc.qt.io/qt-5/qtnetwork-multicastreceiver-example.html) хорошо читает дейтаграммы. С тем же кодом в моем приложении ничего не читалось.
Спасибо кому поможет.