Добрый день!
Помогите разобраться, почему в моем коде иногда пакеты и файлы 60+ мб доходят, а иногда и 20 мб падает почти сразу..
Я понимаю, что передач полно, бери любую, но все таки..
Клиент:
QByteArray arrBlock;
qint64 fileSize;
QDataStream out(&arrBlock, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_0);
sendFile = new QFile(filePatch);
sendFile->open(QFile::ReadOnly);
QFileInfo fi(filePatch);
QString fileName = fi.fileName();
fileSize = fi.size();
QByteArray buffer = sendFile->readAll();
out << quint16(0) << QTime::currentTime() << QString("FILE")
<< fileName << fileSize << buffer;
out.device()->seek(0);
out << quint16(arrBlock.size() - sizeof(quint16));
tcpSocket->write(arrBlock);
И принимающая сторона.
void Server::ReadMessage()
{
QTime time;
QString type;
QTcpSocket *client = (QTcpSocket*)(sender());
QDataStream in(client);
in.setVersion(QDataStream::Qt_5_0);
qDebug() << client->bytesAvailable();
if (!nextBlockSize) {
if (quint16(client->bytesAvailable()) < sizeof(quint16)) {
return;
}
in >> nextBlockSize;
}
if (client->bytesAvailable() < nextBlockSize) {
return;
}
in >> time >> type;
...
SendingFile(client);
}
void Server::SendingFile(QTcpSocket *client)
{
QTcpSocket* mClientSocket = (QTcpSocket*)sender();
QDataStream in(client);
in.setVersion(QDataStream::Qt_5_0;
QByteArray buffer;
QString fileName;
qint64 fileSize;
in >> fileName >> fileSize;
qDebug() << fileName;
qDebug() << fileSize;
forever
{
if (!nextBlockSize) {
if (quint16(client->bytesAvailable()) < sizeof(quint16)) {
break;
}
in >> nextBlockSize;
}
in >> buffer;
if (client->bytesAvailable() < nextBlockSize) {
break;
}
}
QFile receiveFile(dirDownloads + fileName);
receiveFile.open(QIODevice::ReadWrite);
receiveFile.write(buffer);
receiveFile.close();
buffer.clear();
nextBlockSize = 0;
}
Я думаю, что дело в quint16, но не знаю, лучше послушаю Вас