2017-12-05 30 views
0

これはQTの問題よりもUDP設定上の問題である可能性が高いと言ってこれを開始します。QT UDPソケット空のデータグラムを返す

ubuntuコンピュータでUDP再生を使用してWindows PCにPCAPファイルを再生しています。 wiresharkを使ってUDPデータをチェックすると、各パケット内のすべての関連データを見ることができます。しかし、QTプログラムを使用すると、適切な長さのパケットが届きますが、パケットの中にはデータがありません。ちょうど0です。

Windows PCのIPアドレスは、ubuntuソースPCと同じサブネット上にあるように設定されており、適切なポートが設定されています。

私はここで、基本的にQTマルチキャストレシーバの例を使用しています:http://doc.qt.io/qt-5/qtnetwork-multicastreceiver-example.html

任意の考えを?

編集:

適切なコードを含まないことをお詫び申し上げます。

void Receiver::processPendingDatagrams() 
{ 
    while (udpSocket->hasPendingDatagrams()) { 
     QByteArray datagram; 
     datagram.resize(udpSocket->pendingDatagramSize()); 
     udpSocket->readDatagram(datagram.data(), datagram.size()); 
     statusLabel->setText(tr("Received datagram: \"%1\"") 
          .arg(datagram.data())); 
    } 
} 

datagram.data()バイト配列は、パケットに実際に含まれていたものにかかわらず、単に0で埋められます。

思考?

+0

なぜこれがダウン表示されているのかわかりません。私は正直にここでいくつかの助けが必要です。 もし私ができるなら、私はこれを少しでも外に出せます。 受信する各UDPパケットの長さは1375バイトです。私は1375バイトのデータグラムを受け取るが、内容はすべて0である。 – Stinger410

+1

私はdownvoterではありませんが...あなたは*関連するコードを表示する必要があります - 好ましくは[mcve]。そうでなければ、それはすべてちょうど推測です。 –

+0

フィードバックをありがとう、私は質問を更新しました。 – Stinger410

答えて

0

あなたのコードは、readDatagramによって返された受信データグラムのサイズを便利に無視します。それがエラーの原因の1つです。物事は代わりにreceiveDatagramを使用してはるかに簡単になります。

void Receiver::processPendingDatagrams() 
{ 
    while (udpSocket->hasPendingDatagrams()) { 
    auto datagram = udpSocket->receiveDatagram(); 
    statusLabel->setText(tr("Received datagram: \"%1\"") 
         .arg(QString::fromLatin1(datagram.data().toHex()))); 
    } 
} 

は今、データグラムの内容は、16進数でエンコードされたであり、それはそれがどのくらいの時間にあります正確に何を言うのは簡単です。 非常に悪い考えであるは、UTF-8デコーダのバグを潜在的に悪用する可能性があるため、未処理のデータグラムの内容を文字列出力メソッドの引数として渡すことになります。それから身を守るためにtoHex()を使用してください。 data()ここではchar * data()ではなく、QByteArray data()であるので、受信した長さが正確に表示されます。

関連する問題