使用UDP协议发送数据包

时间:2014-12-05 22:39:55

标签: c++ qt udp qtnetwork

我正在使用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";
}

1 个答案:

答案 0 :(得分:1)

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

waitForBytesWritten()的文档引用:

  

此功能可以在没有事件循环的情况下运行。在编写非GUI应用程序以及在非GUI线程中执行I / O操作时,它非常有用。