Вверх ↑
Ответов: 4630
Рейтинг: 749
#1: 2015-05-13 18:01:45 ЛС | профиль | цитата
Так проблема не в конверторе! Просто режим Stream в стандартных TCP компонентах реализован простеньким протоколом: отправляется длина данных, а затем сами данные. На принимающей стороне ожидаются 4 байта длины, затем выделяется требуемая память, в которую и записываются все поступающие данные до получения указанного количества. После получения данные выдаются и опять происходит ожидание 4 байт длины следующих данных.
При передачи же String, данные другая сторона получает порциями. Поэтому у тебя битая картинка. На принимающей стороне нужно дожидаться получения полной картинки. А как это сделать? Точно так же: сначала отправляется размер картинки, затем сама картинка:
<размер><разделитель><данные картинки>

На принимающей стороне накапливаешь данные до <разделителя> - получаешь размер картинки. Продолжаешь накапливать до получения требуемого количества - получаешь картинку. Потом опять начинаешь накапливать до следующего разделителя. На компонентах это сделать сложно, для чего я сделал DataAccumulator. И даже давал тебе схему по отправке файлов [url]forum.html?q=3&p=276327[/url]. Вместо файла отправляешь строку после StreamToStr - и все.

------------ Дoбавленo в 18.01:
Вот, конкретный пример передачи скриншотов по сети: picture over tcp 2015-05-17.zip
1) Запускаете Picture server, жмете Start server, потом Start sending
2) Запускаете несколько Picture client, жмете Connect

Обновлено 17.05.2015

Используется DataAccumulator
карма: 26

0
Редактировалось 3 раз(а), последний 2018-04-02 10:55:48