Название: Проблема с отправкой картинок через QTcpSocket Отправлено: Tibr от Май 25, 2011, 13:04 Всем привет! Нужна помощь...
Столкнулся со следующей проблемой: при попытке отправить картинку через QTcpSocket на сервер. Код: QFile in("c:\\test\\pic.bmp"); Сервер принимает только чисто бинарные данные файла (QDataStream не предлагать) :-) Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: RedDog от Май 25, 2011, 14:01 Подождать пока остальные дойдут байты, не забывая при этом вычитывать из буфера сокета, что там уже есть.
Ну и отправлять лучше частями по несколько Кб что бы буфер не сильно загадить. Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: Tibr от Май 25, 2011, 14:19 Подождать пока остальные дойдут байты, не забывая при этом вычитывать из буфера сокета, что там уже есть. Ну и отправлять лучше частями по несколько Кб что бы буфер не сильно загадить. Проблема в том, что даже вывод в дебаг: Код: qDebug() << bytesToSend; Выдает только заголовок! На самом деле, считается, что с сервером всё в порядке, проблема на клиентской стороне (сервер стабильно отвечает на запросы других клиентских приложений), а то бишь в этом Qt коде. Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: RedDog от Май 25, 2011, 14:21 Код: imageBytes.size(); Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: Tibr от Май 25, 2011, 14:33 Код: imageBytes.size(); Точный размер картинки в байтах. Только что проверил. Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: Пантер от Май 25, 2011, 14:34 bool QAbstractSocket::waitForBytesWritten ( int msecs = 30000 )
Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: Tibr от Май 25, 2011, 14:41 bool QAbstractSocket::waitForBytesWritten ( int msecs = 30000 ) Подождать пока байты допишутся, и что потом? Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: Пантер от Май 25, 2011, 14:42 А потом уже проверять.
Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: Tibr от Май 25, 2011, 14:43 А потом уже проверять. А я думал, что сокет отправляется только после того как данные дописываются, разве не так? Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: Tibr от Май 25, 2011, 14:46 Код: qDebug() << socket->(bytesToSend); Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: LisandreL от Май 25, 2011, 15:16 А я думал, что сокет отправляется только после того как данные дописываются, разве не так? Нет. Более того юольшие объёмы данных будут автоматически разбиваться на пакеты.Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: merke от Май 25, 2011, 15:49 ты лучше покажи, как ты всё это принимаешь на стороне сервера.
стопудняк приём касячит Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: merke от Май 25, 2011, 16:11 Вообще по-сути если хочешь передавать большие объемы данных, а не просто команды, то или воспользуйся QDataStream, либо разработай свой протокол передачи данных. Данные придется передавать пакетами, фиксированной длины, а принимающая сторона должна будет накапливать эти пакеты и склеивать в один файл. Изначально передай просто размер файла, как только размер получен принимающей стороной, начинай слать файл пакетами, как только весь файл передан, отсылай команду окончания передачи и на эту команду принимающая сторона должна сверится с начальным полученным размером и с конечным, если они совпадают склеить файл, а в противном случае, отослать команду для повторной перессылки файла.
Название: Re: Проблема с отправкой картинок через QTcpSocket Отправлено: Tibr от Май 25, 2011, 16:23 Всё исправил. Спасибо, Пантер!
Тема закрыта. |