qt udp多线程收发过程_如何使用Qt UDP套接字发送和接收大数据?

我想使用Qt UDP(非TCP)套接字来传输文件.

所以我写这样的代码:

寄件人

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字节),接收器只能获得甚至在localhost上测试的前8KB数据.

如果我减少发送方的大小编号,例如1024.接收方仍然只获得前8KB数据.

如果我将发送方的大小数量增加到X字节(X> 8192).接收器将获得前X字节数据.

好像要传输的Qt UDP数据包的最小大小是8192字节.接收器总是获取第一个数据包,但不能接收其他数据包.

我在Qt和网络编程方面经验不足,所以我不知道我的猜想是否正确.你能告诉我如何更改这些代码以支持在第一个数据包之后接收数据包,以便我可以传输大数据吗?

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页