При передачи же 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