gpt4 book ai didi

c++ - 使用UDP协议(protocol)发送数据包

转载 作者:行者123 更新时间:2023-11-28 06:32:21 24 4
gpt4 key购买 nike

我正在使用 Qt 构建一个网络项目。我的项目以数据包的形式发送文件,每个数据包大小为 1K,我使用的是 UDP 协议(protocol)。

问题是,当我尝试发送以兆字节为单位的大文件时,函数 writeDatagram() 挂起并且 for 循环 停止(如我所见)。

我该如何解决?这是我用来发送数据包的代码。 vector中存储的数据包。

for(int i=0;i<vector.size();i++)
{
char *pkt=(char*)&vector.at(i);
MsgPacket *p=(MsgPacket*)&vector.at(i);
UDPSocket->writeDatagram(pkt,sizeof(*p),(*addr),(*port));
UDPSocket->waitForBytesWritten();
qDebug()<<"packet"<<i<<"sent";
}

最佳答案

您对 UDPSocket->waitForBytesWritten(); 的调用使您的循环等待直到套接字被刷新。要么不要调用 UDPSocket->waitForBytesWritten();,要么将此例程放在单独的线程中,这样它就不会阻塞。

waitForBytesWritten() 的文档引用:

This function can operate without an event loop. It is useful when writing non-GUI applications and when performing I/O operations in a non-GUI thread.

关于c++ - 使用UDP协议(protocol)发送数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com