unit SocketUnit;

interface
Uses Windows, SysUtils, WinSock;
Function MyClientSocket(IPAddress,HTTPAddress:String):String;
implementation
Function MyClientSocket(IPAddress,HTTPAddress:String):String;
Var
wVersionRequested:Word;
WSAData:TWSAData;
hSocket:TSocket;
name:TSockAddrIn;
GetingString:String;
Buf:Array [0..1023] Of Char;
ReciveBytes:Integer;
Begin {MyClientSocket}
wVersionRequested:=MakeWord(1,1); //инициализируем сокет Windows
FillChar(WSAData,SizeOf(WSAData),#0);//обнулим все значения WSAData
If Not WSAStartup(wVersionRequested,WSAData)=0 Then //стартуем
Begin {If Not = 0}
//неудача при старте
Result:='';
WSACleanup; //уничтожим сокет
Exit;
End; {If Not = 0}

hSocket:=socket(PF_INET,SOCK_STREAM,0);//создаем сокет
If hSocket=INVALID_SOCKET Then
//неудача при создании сокета
Begin  {INVALID_SOCKET}
Result:='';
closesocket(hSocket);//закрыть сокет
WSACleanup; //уничтожим сокет
Exit;
End; {INVALID_SOCKET}

name.sin_family:=AF_INET;//укажем тип протокола
name.sin_addr.S_addr:=inet_addr(PChar(IPAddress));//укажем IP-адрес
name.sin_port:=htons(80);//укажем 80-й порт для HTTP-протокола

If connect(hSocket,name,SizeOf(name))=SOCKET_ERROR Then //соединяемся с сервером
Begin {SOCKET_ERROR}
//неудача при соедении с сервером
Result:='';
closesocket(hSocket);
WSACleanup;
Exit;
End; {SOCKET_ERROR}

FillChar(Buf,SizeOf(Buf),#0);//обнулим буфер
GetingString:='GET '+HTTPAddress+' HTTP/1.1'#13#10#13#10;//сформируем HTTP-заголовок
StrPCopy(Buf, GetingString);//положим заголовок в буфер

If send(hSocket,Buf,SizeOf(Buf),0)=SOCKET_ERROR Then //передаем данные
Begin {SOCKET_ERROR}
//неудача при передаче данных
Result:='';
closesocket(hSocket);
WSACleanup;
Exit;
End;{SOCKET_ERROR}

ReciveBytes:=1; //инициализируем переменную
//будем принимать данные пока они не закончатся или возникнет ошибка
While Not((ReciveBytes=SOCKET_ERROR) OR (ReciveBytes=0)) Do
//ошибка при приеме данных или нет данных
Begin {SOCKET_ERROR OR нет данных}
FillChar(Buf,SizeOf(Buf),#0);  //очистим буфер
ReciveBytes:=recv(hSocket,Buf,SizeOf(Buf),0); //примем данные
Result:=Result+String(Buf); //сформируем результат
End;  {SOCKET_ERROR OR нет данных}

closesocket(hSocket);//закрыть сокет
WSACleanup; //уничтожим сокет
End; {MyClientSocket}
end.
