![]() |
Сокет и получение данных
Народ,я решил попробывать свои силы и сделать качалку фаилов )) , создал сокет, отправляю запрос http серверу на получение фаила,теперь вопрос е подскажите,где можно почитать про получение данных из сокета и сохрание на диске,как убрать из сокета ответ http сервера? Пишу на С++
Зарание благодарен ЗЫ ногами сильно не бить,я только учусь )) |
Цитата:
file db "C:\test.exe",0 url db "your_host/file",0 .code invoke URLDownloadToFile, NULL,ADDR url ,ADDR file ,0,NULL в wininet.dll функция http://www.wasm.ru/article.php?article=socketvssocket З.Ы.:на каком языке пишешь? |
2 GoreMaster Он укзал что пишет на С++. Твой пример хорошь, но на нем него нельзя нацепить прогрессбар ;)
2 [NiGHT]DarkAngel Ты из соката через recv читай сначала данные во временный буфер. КОгда уже пройдут все HTTP заголовки. то потом начинай читать и сразу писать в файл. |
Вот сабж: Создание простого HTTP-клиента
|
http://forum.web-hack.ru/index.php?showtopic=6328
Тебе еще потребуются знание http-протокола. Юзай гугл. Вкратце: сначала посылаешь GET-запрос, затем получаешь в цикле через recv получаешь инфу. Что-то вроде этого: Код:
char buf_in[10];Код:
char* GETRequest(char* server,char* page)Код:
char p[50000]; |
всем спасибо,завтро сдам экзамен и буду пробывать )
|
Так я научился получать данные и псиать в фаил )) , подскажите плз еще немножко,как убрать из фаила ответ Http-сервера ?или где почитать ))
Зарание благодарен |
Цитата:
сохранение на диске - запиши в файл. например CreateFile(), WriteFile(), CloseHandle() убрать ответ сервера - обреж все до двух \r\n подряд и дальше сохраняй. как я понимаю ты сначала записываешь в файл все, что вернул сервер. если да то пошли с нами долбаться и гонять по вене. на*** сохранять в файл ответ сервера? получаешь ответ, пока не встретятся \r\n два раза. затем читаешь в буффер скажем по 5кб данных и сохраняешь в файл. если надо эстетичнее - находи Content-Length: X и считывай X после переносов. если ещё эстетичнее - InternetOpen(), HttpOpenRequest(), HttpSendRequest() и так далее. например из illusion Код:
всякие if (!Opt_HTTP_Download.started) уберай je0n, пиздец ты друг накатал ***ни) может будет по байту запрос составлять и отсылать по байту? так нельзя? sprintf( request, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", path, host ); send( s, request, strlen( request ), 0 ); Цитата:
Цитата:
Цитата:
Цитата:
PS кез спит, сейчас разбужу, забыла какая есть ф-ия ещё API там... а. всмысле это нерд пишет) приветик) |
Цитата:
Ищи эти 4 байта в ответе сервера. ЗЫ. это если протокол 1.0. У протокола 1.1 там свои выкрутасы еще есть. Цитата:
Для протокола 1.1 - там передается отдельно длина запроса, и после передачи всего тела сокет не закрывается, так что если этого не учесть, твоя прога повиснет, когда получит все данные, и отвиснет только после разрыва соединения по тайм-ауту |
Цитата:
|
| Время: 12:36 |