Qt QUdpSocket readyRead () сигнал не запускается - PullRequest
2 голосов
/ 04 июля 2011

Я пытаюсь написать небольшое приложение на сервере UDP.

У меня есть клиент, передающий на этот сокет приложений, и я проверил, что он отправляет нормально, используя небольшую эхо-программу UDP (которая отображает данные, полученные на порт, на экран), а также я могу видеть пакетыполучил в Wireshark.

Я использую QUdpSocket, и может показаться, что это Bind ok при настройке, но сигнал readyRead (), похоже, никогда не срабатывает.

Я включил часть своего кода ниже - в тот момент, когда я просто пытаюсь эмулировать маленькую эхо-программу.

Просто чтобы дать некоторый контекст приведенному ниже коду - нажатие кнопки на пользовательском интерфейсе вызывает «setupNewSocket» на порту, который вводится в пользовательском интерфейсе.

#include "sockethandler.h"

SocketHandler::SocketHandler(QObject *parent) :
QObject(parent)
{
    udpSocket = new QUdpSocket(this);

    connect( &w, SIGNAL(openNewUDPSocket(quint16)), this, SLOT(setupNewSocket(quint16)) );
    connect( this, SIGNAL(printOnUI(QString,QString,QString)), &w, SLOT(updateUI(QString,QString,QString)) );

    w.show();
}

void SocketHandler::readPendingDatagrams()
{
     while (udpSocket->hasPendingDatagrams())
     {
         QByteArray datagram;
         datagram.resize(udpSocket->pendingDatagramSize());
         QHostAddress sender;
         quint16 senderPort;

         udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);

         QString data = QString( datagram.data() );
         QString sender_address = sender.toString();
         QString sender_port = QString("%1").arg(senderPort);

         emit printOnUI(data, sender_address, sender_port);

    }

}
void SocketHandler::setupNewSocket(quint16 port)
{
    if( udpSocket->bind(QHostAddress::LocalHost, port) )
    {
    connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
    }
    else
    {
    // bind has failed
    }

}

1 Ответ

3 голосов
/ 04 июля 2011

QHostAddress :: LocalHost привязывается к 127.0.0.1.

Возможно, вам нужно использовать QHostAddress :: Any , который привязывается к 0.0.0.0.

...