Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Скачать файл из нэта по средствам сокетов


Автор: zet36 27.2.2009, 23:14
Здравствуйте, искал на форуме но что то не нашол реализацию загрузки файла из нэта по средствам сокетов. Вот я пытаюсь послать запрос и сохранить ответ в файл
Код

var Site : PChar;
   sock : TSocket;
   HostEnt : PHostEnt;
   WSA : TWSAData;
   addr : sockaddr_in;
   sendbuff : String;
   PostData : String;


  f:TextFile;
  i:integer;
  buf:array[0..255] of char;
begin

if WSAStartup($0101, WSA) <> 0 then
Exit;
sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
FillChar(addr, SizeOf(sockaddr_in), 0);
addr.sin_family := AF_INET;
addr.sin_port := htons(80);
Site := 'www.google.ru';
HostEnt := gethostbyname(Site);
addr.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);

Connect(sock, addr, SizeOf(addr));

       sendbuff := '';
       sendbuff := 'GET http://www.google.ru/images/nav_logo3.png  HTTP/1.0' + #13#10 +
                   'User-Agent: Opera/9.10 (Windows NT 5.1; U; ru)' + #13#10 +
                   'Host: www.google.ru' + #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 +
                   'Referer: http://www.google.ru/images/nav_logo3.png' + #13#10 +

send(sock, sendbuff [1], Length(sendbuff), 0);
AssignFile(f, 'logo.png');
Rewrite(f);

 repeat
i := recv(sock, buf, sizeof(255), 0);
writeln(f, copy(buf,1,i));
until i <= 0;
       CloseFile(f);
       CloseSocket(sock);
     end;

но в файл записывается  только 2 байта(2символа переноса строки) , буду благодарен за помощь.

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