我正在使用Qt来构建网络项目。我的项目将文件作为数据包发送,每个数据包的大小为1K,我使用的是UDP
协议。
问题是,当我尝试发送大小为兆字节的文件时,函数writeDatagram()
挂起,for loop
停止(我觉得)。
我该如何解决?这是我用来发送数据包的代码。数据包存储在向量中。
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";
}
答案 0 :(得分:1)
您对UDPSocket->waitForBytesWritten();
的调用会使您的循环等待直到刷新套接字。要么不要调用UDPSocket->waitForBytesWritten();
,要么将此例程放在一个单独的线程中,这样它就不会阻塞。
waitForBytesWritten()
的文档引用:
此功能可以在没有事件循环的情况下运行。在编写非GUI应用程序以及在非GUI线程中执行I / O操作时,它非常有用。