Здравствуйте, искал на форуме но что то не нашол реализацию загрузки файла из нэта по средствам сокетов. Вот я пытаюсь послать запрос и сохранить ответ в файл
| Код | 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символа переноса строки) , буду благодарен за помощь. |