Есть сервер и клиент (отсылает данные, например файл):
Клиент:
void FileSender::sendFile()
{
QFile file(filePath);
if (file.open(QIODevice::ReadOnly)) {//если файл открылся
QByteArray dataForPeer;//массив для данных
QDataStream out(&dataForPeer, QIODevice::WriteOnly);//выходной поток
QByteArray byteArray;//поток байтов из файла
while(!file.atEnd()) {//пока не конец файла
byteArray=file.read(1024);//читаем по килобайту
out << quint16(0) << FILEBYTES << byteArray;
out.device()->seek(0);
out << quint16(dataForPeer.size() - sizeof(quint16));
tcpSocket->write(dataForPeer);
dataForPeer.clear();//очищаем массив для отправки серверу
}
//отправка уведомления об окончании передачи файла
out << quint16(0) << SENDING_FINISHED;
out.device()->seek(0);
out << quint16(dataForPeer.size() - sizeof(quint16));
tcpSocket->write(dataForPeer);
file.close();//закрываем файл
}
}
На сервере есть слот, соединенный с сигналом readyRead сокета, но видимо данные приходят так быстро, что сервер не успевает сделать нужные действия (а именно записать на диск). Что можно придумать? Можно ли как то на клиенте узнать считаны ли данные сервером или нет(и ждать этого момента)? В голову приходит только одно: от сервера высылать уведомление о принятых данных, чтобы клиент мог дальше передавать их (но мне кажется, что что-то не то).