Вверх ↑
Ответов: 4671
Рейтинг: 767
#1: 2014-08-08 19:38:30 ЛС | профиль | цитата
Assasin писал(а):
Не, не поможет
Ну, как бы подразумевались соответствующие проверки. А раз предполагаем, что недостающая часть может прийти в следующем фрагменте, приходим к тому, что нужен некий потоковый накопитель, роль которого при dtStream исполняет MemoryStream.

Я даже сделал соответствующий компонент, чтобы обрабатывать приходящие данные на уровне схемы. Например, можно накапливать данные, пока не будет найден некий разделитель. Данные до разделителя выдаются, данные после остаются в накопителе. Можно переключить накопитель, чтобы он выдавал данные и генерировал событие после указанного количества данных. Таким образом можно было послать размер файла, а после разделителя - содержимое. Переключая режимы накопителя можно разбирать такие протоколы.

Таким же образом можно обрабатывать HTTP ответы: до разделителя #13#10#13#10 - заголовки, после - тело. Получили заголовки, можем решать, что делать с телом. В примерах HTTP через TCP мы обычно накапливаем ответ аж до разрыва соединения, а только потом разбираем его. Что не очень подходит для закачки больших файлов и работы с постоянным соединением.

До практического применения компонента пока не дошел.
карма: 26

0