![]() |
Сокет и получение данных
Народ,я решил попробывать свои силы и сделать качалку фаилов )) , создал сокет, отправляю запрос 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 - там передается отдельно длина запроса, и после передачи всего тела сокет не закрывается, так что если этого не учесть, твоя прога повиснет, когда получит все данные, и отвиснет только после разрыва соединения по тайм-ауту |
Цитата:
|
2 Kez млин. конечно нужен временный буфер куда читать.
я просто навренео не правильно выразился. я имел в виду троковую переменну. в которую читать данные и искать конец Http заголовка. |
Http заголовок завершается двойным Crlf. дальше идут данные.
|
Так вроде чето получилось написать,хтмл странички принимаю без проблем,а вот с остальным rar, exe и тд. как то не важно,куда то теряются данные при передачи ((
Если не трдуно посмотрите пожалйуста исходник и моно носом ткнуть что и где неправильно)) Ногами сильно не бить , я только учусь и в этой проге куча всяких недостатков и багов,но все ранво зарание всем спасибо за все ) Код:
//--------------------------------------------------------------------------- |
Цитата:
И ещё, мне кажется что тебе рановато использовать КЛАССЫ. Ещё и такие бессмысленные как в данном случае. Спрашивается - нахера они тебе тут нужны? |
Sorry 2 all...
Вот накатал скачивание при помощи класса CInternetFile библиотеки MFC. Код:
void DownloadFile(LPCSTR pstrURL,LPCSTR lpszFileName) |
Цитата:
[NiGHT]DarkAngel, не поддавайся на провокации. еб*аш Свой довнлоадер пока не заработает. если не получается по другому, то нужно учится и на своих ошибках.. |
с начала не читал так что есди не попаду в тему то просто не обращайте внимания
FILE *out; while(x=ecv(s,buf_in,sizeof(buf_in)-1,0)) { buf_in[x]=0; fwrite(buf_in,x,1,out); } че то типа того |
da_ff, исправь ecv на recv
|
Я не знаю даже. Может вам картинку с комиксом нарисовать надо или под музыку песню написать где рассказывается на китайском что strcat() прикрепляет строку к строке а не массив байт к массиву байт и что через MFC делать скачивание файла - все равно что через 3DS MAX рисовать точку на экране?
|
Блин, стоит только отойти, уже флейма разведут на Н страниц. Таких тем в инете полно! Исходников тоже!
На крайняк если ТС ничего не найдет (вероятность менее 1%), то я потом выложу в паблик Antichat Web Tool, где скачивание страницы реализовано через чистые сокеты. В двух словах: Код:
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);Цитата:
Тема закрыта |
| Время: 12:01 |