Qt QUdpSocket的readyRead()信号没有触发

3
我正在尝试编写一个小型UDP服务器应用程序。
我有一个客户端传输到该应用程序套接字,并且使用小型UDP回显程序(将在端口上收到的数据回显到屏幕上)验证了这个发送是否正常,同时我也可以在wireshark中看到接收到的数据包。
我正在使用QUdpSocket,似乎它在设置时绑定成功,但是readyRead()信号似乎从未被触发。
我在下面包含了一些我的代码 - 目前我只是尝试模拟小的回显程序。
为了给下面的代码提供一些背景 - UI上的按钮按下会调用“setupNewSocket”,该端口在UI上键入。
#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个回答

4

谢谢 - 我大约7分钟前意识到了这一点,但由于我只有50个积分,直到8小时过去后才能回答自己的问题。不过,我向你致敬! - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接