если c Tcp все понятно то вот с udp нет
переделывал код передачи и приема с tcp
пытаюсь передать файлы по udp, если вставить задержку в 30 милисекунд то примет все пакеты, а без этой задержки теряется почти все
/*SEND*/
QUdpSocket* udpSocket = new QUdpSocket;
udpSocket->connectToHost(QHostAddress::LocalHost,2323);
connect(udpSocket,SIGNAL(error(QAbstractSocket::SocketError)),SLOT(slotError(QAbstractSocket::SocketError)));
QFile file("10-the_coasters-down_in_mexico.mp3");
QByteArray arr;
file.open(QIODevice::ReadOnly);
int progr = 0;
// m_pprb->setRange(0,file.size());
QByteArray datagram;
while(!file.atEnd()){
arr = file.read(1400);
msleep(30);
QDataStream out(&datagram, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
qApp->processEvents();
progr +=arr.size();
out << qint64(0);
out << file.fileName() << progr << file.size() << arr;
out.device()->seek(qint64(0));
out << qint64(datagram.size() - sizeof(qint64));
udpSocket->write(datagram);
}
/*READ*/
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress* address = new QHostAddress;
udpSocket->readDatagram(datagram.data(),datagram.size(),address);
QDataStream in(&datagram, QIODevice::ReadOnly);
quint64 size = -1;
if(in.device()->size() > sizeof(quint64)){
in >> size;
}
else return;
if(in.device()->size() - sizeof(quint64) < size) return;
int progr = 0;
QString fileName;
quint64 maxRange = 0;
QByteArray arr;
in >> fileName >> progr >> maxRange >> arr;
QFile file(fileName);
file.open(QIODevice::Append);
file.write(arr);
file.close();
m_pprb->setRange(0,maxRange);
StepProgressBar(progr);