我想使用Qt UDP(而不是TCP)套接字来传输文件。
所以我编写了以下代码:
发送器
接收者
当我发送小文件时,没有问题。但是,如果我想发送大文件(> 8192字节),接收方只能获取顶部8KB的数据,即使在本地测试也是如此。如果我减小发送者中的大小数字,例如1024,接收者仍然只获取顶部8KB的数据。如果我将发送者中的大小数字增加到X字节(X>8192),接收者将获取前X个字节的数据。
看起来Qt UDP数据包传输的最小大小为8192字节。接收方总是能够接收第一个数据包,但无法接收其他数据包。
我对Qt和网络编程的经验很少,所以我不知道我的猜测是否正确。您能告诉我如何更改这些代码以支持接收第一个数据包后的数据包,以便我可以传输大量数据吗?
发送器
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());
}
接收者
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());
}
当我发送小文件时,没有问题。但是,如果我想发送大文件(> 8192字节),接收方只能获取顶部8KB的数据,即使在本地测试也是如此。如果我减小发送者中的大小数字,例如1024,接收者仍然只获取顶部8KB的数据。如果我将发送者中的大小数字增加到X字节(X>8192),接收者将获取前X个字节的数据。
看起来Qt UDP数据包传输的最小大小为8192字节。接收方总是能够接收第一个数据包,但无法接收其他数据包。
我对Qt和网络编程的经验很少,所以我不知道我的猜测是否正确。您能告诉我如何更改这些代码以支持接收第一个数据包后的数据包,以便我可以传输大量数据吗?