Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Скачать бинарный файл по http.


Автор: 444ert666 7.7.2008, 17:17
Здравствуйте!
Хочу попросить сразу прощения, за вероятный тупизм с моей стороны. Но ничего на форуме способного помочь мне не нашел, есть примеры но все с использованием компонент билдера или визуал судии(у мну компилятор gcc под win). В прчинципе, задача, на первый взгляд тривиальна, отослать через сокет http запрос, получить ответ, обработать заголовки ответа, убрать их из буфера тцп, далее считать из него количество байт, указанное в поле Content-length, и записать в файл.
Но не получается:((((.... с текстовыми файлами все проходит, с бинарными не фига:( - в файл пишется только три каких то левых байта:(

вот код:
Код

.....
 sprintf((char *)buff1,"%s%s%s%s%s%s",
"GET ",
 path,
" HTTP/1.1\r\n",
"Host: ",
host,
"\r\n\r\n");
send (my_sock, (const char *)buff1,strlen(buff1), 0 ) ; 
nsize=recv(my_sock,&buff[0],512,MSG_PEEK);       //просматриваю заголовки ответа сервера
page=parsePage(&buff[0]);    //отделяю заголовки от тела, также получаю значение Content-length
nsize=recv(my_sock,&buff[0],strlen(page.headers)+strlen("\r\n\r\n"),0); //считываю из буфера данные длиною: длина заголовков(page.headers) ну и две новых строки, в итоге у меня в буфере, 
//остается лишь тело файла, правильно?     
char * buffFile=(char *)malloc(page.cLength);     //выделяю память для хранения файла
nsize=recv(my_sock,buffFile,page.cLength,0); //считываю данные из буфера длиною: page.cLength - значение Content-length, то есть все содержимое принятого файла.
f = fopen("upload.exe","wb"); // далее записываю все полученное пишу в файл
fprintf( f, buffFile );
fclose(f);    


Никак не пойму, где я заблуждаюсь.... 
запутался уже:(
Заранее спасибо!

P.S. не судите строго, только начинаю, изучение этого, без сомнений, самого рульного языка.

Автор: antoniobanderas 7.7.2008, 22:00
код parsePage кинь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)