Wie zum senden und empfangen von großen Daten mit Qt-UDP-socket?

Will ich mit Qt UDP (nicht TCP) socket-Datei zu übertragen.
Also Schreibe ich code wie diesen:

Sender

QFile file1(QString::fromStdString(filedir));
QByteArray bytes;
file1.open(QIODevice::ReadOnly);
QTextStream in(&file1);
while (!in.atEnd()) {
    bytes = in.read(8192).toAscii();
    udpSocket.writeDatagram(bytes, QHostAddress(ip), port.toInt());
}

Empfänger

udpSocket1.bind(ui->sendPort->text().toInt());
connect(&udpSocket1,SIGNAL(readyRead()),this,SLOT(listenfile()));

void Widget::listenfile() {
    QFile file("received.txt");
    file.resize(0);
    file.open(QIODevice::Append);
    QTextStream out(&file);
    do {
        QByteArray data;
        data.resize(udpSocket1.pendingDatagramSize());
        udpSocket1.readDatagram(data.data(),data.size());
        QString str=data.data();
        ui->textBrowser1->append(str);
        out << data;
    } while (udpSocket1.hasPendingDatagrams());
}

Wenn ich senden kleine Datei, ist es kein problem.
Jedoch, wenn ich will, um das senden von großen Datei (> 8192 Byte), der Empfänger kann sich nur die oberen 8KB Daten selbst getestet auf localhost.
Wenn ich das verringern der Größe der Zahl im Absender, wie 1024. Der Empfänger bekommt nur noch die oberen 8KB Daten.
Wenn ich erhöhen Sie die Größe der Zahl im Absender X bytes (X > 8192). Die Empfänger erhalten die top-X Bytes an Daten.

Scheint es, wie die minimale Größe der Qt-UDP-Paket zu übertragen ist 8192 bytes. Der Empfänger bekommt immer das erste Paket, kann aber nicht andere erhalten.

Habe ich wenig Erfahrung in Qt und Netzwerk-Programmierung, so dass ich nicht weiß, ob meine Vermutung richtig ist oder nicht. Können Sie mir sagen, wie Sie ändern Sie diese codes, um Unterstützung empfangen Pakete nach dem ersten Paket, so kann ich die übertragung großer Datenmengen?

InformationsquelleAutor WH's HeV | 2013-03-18
Schreibe einen Kommentar