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

  #5  
Старый 31.01.2010, 18:45
GlooK
Участник форума
Регистрация: 20.04.2007
Сообщений: 174
Провел на форуме:
2310282

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

Цитата:
Сообщение от iGlass  
Не стал создавать отдельную тему, может кто знает как на WINSOCK получить страницу в стринг лист. Я в сокетах вообще нуб..

Заранее спасибо.

И ещё может кто знает хорошую литературу, статьи по работе с сетью в делфи.
Код:
const
  mstimeout = 15000;
  buffsize = 1024;
  crlf = #13#10;

var
  StrLst: tstringlist;

function fWSRecv(wHost, wRequest: string; wPort: word = 80):string;
var
hSocket: TSocket;
wsData: TWSAData;
hHost: PHostEnt;
hAddr: TSockAddrIn;
hTimeout: TTimeVal;
iRead: integer;
hData: string;
hBuffer: array[0..buffsize] of char;
begin
 WSAStartup($202, wsData);
 hSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 hHost := gethostbyname(PChar(wHost));
 hAddr.sin_family := AF_INET;
 hAddr.sin_port := htons(wPort);
 hAddr.sin_addr := pinaddr(hHost^.h_addr^)^;
 hTimeout.tv_usec := 0;
 hTimeout.tv_sec := mstimeout;
 setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, @hTimeout, sizeof(ttimeval));
 connect(hSocket, hAddr, SizeOf(hAddr));
 hData := '';
 Send(hSocket, wRequest[1], length(wRequest), 0);
 while (TRUE) do
 begin
  FillChar(hBuffer, SizeOf(hBuffer), 0);
  iRead := Recv(hSocket, hBuffer, length(hBuffer), 0);
  hData := hData + copy(hBuffer, 0, iRead);
  if (iRead <= 0) then break;
 end;
 CloseSocket(hSocket);
 WSACleanup;
 result := hData;
end;

begin
StrLst := TStringList.Create();
StrLst.Add(fWSRecv('ya.ru',
'GET /index.php HTTP/1.1' + CRLF +
'Host: ya.ru' + CRLF +
'Connection: close' +  CRLF + CRLF));
end.

Последний раз редактировалось GlooK; 31.01.2010 в 18:48..
 
Ответить с цитированием