Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2010, 12:17   #1
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию Download File [WinSock]

Написал вот такой код
Цитата:
...
var
type TBuf = array [0..65535] of char;
....
Procedure DownLoad();
var
Send_buf, Recv_buf: TBuf;
Sock : TSocket;
sockAddr : TSockaddr;
Cookies : String;
Query : TBuf;
Tmp : String;
buf : array [0..1023] of Char;
RcvLen : Integer;
begin
Sock:=socket(AF_INET,SOCK_STREAM,IP PROTO_TCP);
sockAddr.sin_family := AF_INET;
sockAddr.sin_port := htons(80);
sockAddr.sin_addr.S_addr := Resolve('ismily.ru');

connect(Sock,sockAddr,sizeof(TSockA ddr));

if(Sock <> INVALID_SOCKET) then
begin
StrPCopy(Send_buf,'GET /111.jpg HTTP/1.1'#13#10 +
'Host: ismily.ru'#13#10+
'User-Agent: Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1'#13#10+
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'#13#10+
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'#13#10+
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'#13#10+
'Accept-Encoding: deflate, identity, *;q=0'#13#10+
'Connection: Close, TE'#13#10+
'TE: deflate, chunked, identity, trailers'#13#10#13#10);
send(Sock,Send_buf,strlen(Send_buf) ,0);
Tmp:='';
ZeroMemory(@buf, 1024);
RcvLen:=recv(Sock,buf,1024,0);
while RcvLen > 0 do
begin
Tmp := Tmp + Copy(buf, 0, RcvLen);
RcvLen := recv(sock, buf, 1024, 0);
end;
//log(tmp,clRed);
StrPCopy(Recv_buf,tmp);
closesocket(Sock);
end;
end;
В лог скидывает ответ от сервера: хэдер и собственно, сам контент файла.
Как можно предварительно создать файл и писать в него содержимое по ходу его загрузки (ReadFile/Writefile ?). И как отделить заголовки от содержимого? Может там определенное кол-во байт пропустить надо, или обычный парсинг строк, то есть до \r\n, а далее идет уже сам файл?
Denager вне форума Ответить с цитированием
Старый 10.05.2010, 17:10   #2
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

С постепенной записью в файл из буефра чтения сокета разобрался)
Можно ли как-то узнать размер скачиваемого файла? И начинать качать не с начала (Организовать докачку файла). Интерсует именно WinSock
Denager вне форума Ответить с цитированием
Старый 10.05.2010, 17:11   #3
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

С размером тоже разобрался - парситть Conent-Lenght из заголовка.. Остается только как начать скачивать не с начала файл
Denager вне форума Ответить с цитированием
Старый 13.05.2010, 13:01   #4
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

Спасибо, разобрался, передавать в заголовке Range и кол-во байт
Denager вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чём разница между unit, header file, cpp file? TwiX Общие вопросы C/C++ 6 29.04.2012 19:49
Error 1 fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory s20 Общие вопросы C/C++ 2 26.09.2009 23:28
Download файл eldar PHP 1 10.09.2009 19:23
Qt 4 download merax Свободное общение 4 12.08.2008 13:41