Форум: "Сети";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
Вниз(GET) Как более эффективно "избавиться от заголовка" полученнного Найти похожие ветки
← →
zap8 (2007-02-20 07:16) [0]При получении от сервера запрошенного файла (метод GET) помимо тела самого файла в начале передается заголовок.
Как более эффективно «избавиться» от заголовка.
Можно конечно считывая(Socket.ReceiveBuf) вначале по 1 байту дойти до конца заголовка(#13#10#13#10) и с этого места начать копирование в файл. Можно по окончании загрузки что называется «вырезать» массив байт файла, начиная с конца заголовка и до конца файла. Но как-то все это не эффективно.
p.s. для приема байт данных использую именно функцию Socket.ReceiveBuf(Buff,SizeOf(Buff))
Посоветуйте как лучше сделать.
← →
SlymRO (2007-02-20 08:51) [1]zap8 (20.02.07 7:16)
"заголовка" для лохов придумана... а крутые перцы от них эффективно избавляются...
конец заголовка - пустая строка или в твоей интерпритации последовательность байтов #13#10#13#10
и ничего более "эффективного" чем по "1 байту" не придумали
← →
Сергей М. © (2007-02-20 08:58) [2]
> zap8 (20.02.07 07:16)
см. SlymRO (20.02.07 08:51) [1]
Только вот считывать по одному байту за один вызов ReceiveBuf действительно не эффективно.
Считывай в буфер за один вызов блоки размером кратным 4к и анализируй, нет ли среди считанных в буфер данных последовательности #13#10#13#10 (естественно, с учетом анализа предыдущего считанного буфера)
← →
zap8 (2007-02-20 09:10) [3]>и ничего более "эффективного" чем по "1 байту" не придумали
Придумал! Считывать по 1гВ
← →
SlymRO (2007-02-20 09:12) [4]Сергей М. © (20.02.07 8:58) [2]
по одному байту за один вызов ReceiveBuf действительно не эффективно
Апеллирую
а как же readln? канечно там 128 байт кеша, но читает то _ReadChar! или тот же pos: сначала REPNE SCASB! (поиск байта) а уж потом REPE CMPSB (кстати тоже по байту)
← →
Сергей М. © (2007-02-20 09:23) [5]
> SlymRO (20.02.07 09:12) [4]
> а как же readln? канечно там 128 байт кеша
128 <> 1
> читает то _ReadChar
Заметь - из кэша читает.
← →
DVM © (2007-02-26 17:38) [6]
> Посоветуйте как лучше сделать.
Читать ответ порциями (неважно по сколько байт) в буфер. После приема очередной порции делать проверку на #13#10#13#10. Если разделитель найден - отсекаем начало буфера, включая разделитель и продолжаем читать уже без проверки на разделитель.
← →
zap8 (2007-02-27 09:08) [7]DVM © (26.02.07 17:38) [6]
Так и сделал. Спасибо.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c