2
小さなUDPサーバーアプリケーションを作成しようとしています。Qt QUdpSocket readyRead()シグナルがトリガーされていません
私はこのアプリケーションソケットに送信するクライアントを持っていますが、これは小さなUDPエコープログラム(画面上のポートで受信したデータをエコーします)を使ってOKを送信していることを確認しました。 wireshark。
私はQUdpSocketを使用していますが、これはセットアップ時にBinds okと表示されますが、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