2011-07-04 12 views
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 
    } 

} 

答えて

3

QHostAddress::LocalHostは127.0.0.1に対応します。

おそらくQHostAddress :: Anyを使用して0.0.0.0にバインドする必要があります。

+0

私は約7分前にこれを認識しましたが、私は50クレジットしか持っていないので、8時間が経過するまで自分の質問に答えることはできませんでした。私はあなたに感謝します。 – Matt

関連する問題