2017-01-15 12 views
1

Q ++でソケットを介してデータファイルを送信しようとしていますが、サーバーが空のデータストリームを受信しました。ソケットを介してファイルを送信するQT

QFile file("/Users/mathieu/Documents/test.wav"); 
if(!file.exists()) qDebug() << "not found file"; 
file.open(QIODevice::ReadWrite); 
QByteArray data; 
data.append(file.readAll()); 
file.close(); 
QUdpSocket udpsock; 
udpsock.writeDatagram(data, QHostAddress::Any, 1441); 

と受信用:

QUdpSocket udp; 
QByteArray buffer; 
buffer.resize(udp.pendingDatagramSize()); 
QHostAddress sender; 
qint16 senderPort; 
udp.readDatagram(buffer.data(), buffer.size()); 
qDebug() << buffer; 

しかし、バッファが空である...私はなぜ理解していません。

+0

udpソケットレシーバーをポートに接続しているように見えませんか? – tinkertime

+2

レシーバーのコードは信号 'readyRead()'のスロット機能にありますか?また、受信データグラムがあるかどうかを確認する必要があります: 'while(udp.hasPendingDatagrams()){...'あなたのソケットはポートでバインドされている必要があります: 'udp.bind(1441、QUdpSocket :: ShareAddress); ' –

答えて

0

受信側のUDPソケットを初期化する必要があります。

void initUdp() { 
    udpSocket = new QUdpSocket(this); 
    udpSocket->bind(udpPort, QUdpSocket::ShareAddress); 
    connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processUdpData())); 
} 

void processUdpData() { 
    while (udpSocket->hasPendingDatagrams()) { 
      QByteArray buffer; 
      buffer.resize(udpSocket->pendingDatagramSize()); 
      udpSocket->readDatagram(buffer.data(), buffer.size()); 
      qDebug() << buffer; 
    } 
} 
関連する問題