Показать сообщение отдельно

  #583  
Старый 06.09.2007, 19:25
5p4x2kn3t
Новичок
Регистрация: 06.09.2007
Сообщений: 8
С нами: 9831050

Репутация: 0
По умолчанию

Пытаюсь в своей программе получить HTML-код Web-страницы с помощью WinSock API, но программа элементарно виснет (если есть связь с Интернетом) я неправильно пользуюсь сокетами или HTTP-протоколом?

P.S. Antichat почему-то на месте многих пробелов ставит *

Код:
procedure Get;
  var
   k : integer;
  * Servername  : string;

* * FSocket* * : integer;
* * HostEnt* * : PHostEnt;
* * SockAddrIn : TSockAddrIn;
* * dSize* * * : dword;
* * Str* * * * : array [0..255] of Char;
* * WSAData* * : TWSAData;
begin

//...
* WSAStartup(257, WSAData);* 
* * if Pos('http://', fUrl) = 0 then
* * * fUrl* *:= 'http://' + fUrl;

* Servername := AnsiReplaceStr(fUrl, 'http://', '');

* * FOR k := 1 TO length(Servername) DO
* * * if Servername[k] = '/' then
* * * * begin
* * * * * Servername := copy(Servername, 1, k - 1);
* * * * * break;
* * * * end;

* FSocket* * * * * * * * * * := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
* SockAddrIn.sin_family* * * := AF_INET;
* SockAddrIn.sin_port* * * * := htons(80);
* SockAddrIn.sin_addr.s_addr := inet_addr(PAnsiChar(Servername));
* * if SockAddrIn.sin_addr.s_addr = INADDR_NONE then
* * * begin
* * * * HostEnt := gethostbyname(PAnsiChar(Servername));
* * * * * if HostEnt = nil then
* * * * * * begin
* * * * * * * closesocket(FSocket);
* * * * * * * Exit;
* * * * * * end;
* * * * SockAddrIn.sin_addr.s_addr := PLongint(HostEnt^.h_addr_list^)^;
* * * end;
* * if Connect(FSocket, SockAddrIn, SizeOf(SockAddrIn)) <> -1 then
* * * begin
* * * * lstrcpy(Str, PAnsiChar('GET ' + url + ' HTTP/1.1' + #13#10#0));
* * * * Str := '';
* * * * send(FSocket, Str, lstrlen(Str), 0);
* * * * * repeat
* * * * * * dSize := recv(FSocket, Str, 255, 0);
* * * * * * Code.AddString(Str);
//Code - аналог TStringList
* * * * * until
* * * * * * (dSize = 0) or (dSize = SOCKET_ERROR);
* * * * closesocket(FSocket);
* * * end;
* WSACleanup();
//...
end;
 
Ответить с цитированием