2
我正在嘗試編寫一個小的UDP服務器應用程序。Qt QUdpSocket readyRead()信號未觸發
我有一個客戶端傳輸到這個應用程序的套接字,我已經驗證這是使用一個小的UDP回聲程序(它將端口上收到的數據回顯到屏幕)發送正常,而且我可以看到收到的數據包Wireshark的。
我正在使用QUdpSocket,它會出現這樣的綁定設置確定 - 但readyRead()信號似乎並沒有被觸發。
我已經在下面列出了一些我的代碼 - 當時我只是試圖模擬小回聲程序。
只是爲了給下面的代碼提供一些上下文 - 在UI上按下按鈕在UI上鍵入的端口上調用「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
}
}
謝謝 - 我已經意識到這大約7分鐘前,但因爲我只有50個信用,它不會讓我回答自己的問題,直到8小時過去。我向你致敬! – Matt