Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

(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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
2-1191816353
NGPOL
2007-10-08 08:05
2007.10.28
Нулевые строки в отчетах


2-1191492500
031178
2007-10-04 14:08
2007.10.28
Как подцепить базу ACCESS в DELPHI.


2-1191307093
amily
2007-10-02 10:38
2007.10.28
строки на БД


1-1186741765
Kolan
2007-08-10 14:29
2007.10.28
Одинаковые имена модулей в разных пакетах, как исправить


15-1190299649
Nikfel
2007-09-20 18:47
2007.10.28
Драйвер сотового MOTOROLA.