Проблема с QTcpSocket и отправкой двоичных данных - PullRequest
0 голосов
/ 25 мая 2011

есть следующий код:

QFile in("c:\\test\\pic.bmp");
in.open(QFile::ReadOnly);
QByteArray imageBytes = in.readAll();
socket->write(bytesToSend);

На сервере я получаю только заголовок файла .bmp. Что может вызвать такое поведение? И как решить эту проблему?

1 Ответ

2 голосов
/ 25 мая 2011

Этот метод записывает самое большее количество байтов, которое является вашим размером данных. Но на самом деле может писать меньше. Фактически возвращает количество отправленных байтов. Поэтому вы должны сделать цикл отправки остальных данных, пока все не будет отправлено. Вот так.

qint64 dataSent = 0;
while(dataSent < sizeof(bytesToSend))
{
   qint64 sentNow = socket->write(bytesToSend+dataSent);
   if(sentNow >= 0)
      dataSent += sentNow;
   else
      throw new Exception();
}

Это собственное поведение сокета.

...