Chcę wysłać zwykły GET do serwera jakiejś stronki np. pcworld.pl, ale coś mi nie wychodzi.
Tak samo z odbieraniem danych (jakieś krzaki mam)...
Ogólnie to mało jest w necie info (na Polskich stronkach) o socketach.
Na gotowym komponencie socketów nie chcę nic robić, bo to banalne to wysyłanie zapytań i odbieranie danych... chcę się nauczyć winsocka, na początek samego clienta...

Na razie wykodziłem coś takiego:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSock, StdCtrls, ComCtrls;

const
  wm_polaczenie = WM_USER + 22;

type
  TForm1 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
    procedure polaczenie(var Msg: TMessage);  message wm_polaczenie;
    procedure OdebraneDane;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  //wsa
  wsa: WSAData;

  //klient
  klient: Integer;
  socket_adres: sockaddr_in;

  ErrorCode: Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  ver: DWORD;
  zapytanie: String;
  wyslano: Integer;
begin
  //WSAData
  ver:= MakeWord(2, 2);
  ErrorCode:= WSAStartup(ver, wsa);   //WSAStartup()
  if (ErrorCode = SOCKET_ERROR) then ShowMessage('Funkcja WSAStartup failed');

  //Klient
  klient:= socket(AF_INET, SOCK_STREAM, 0);   //Socket()
  if (klient = INVALID_SOCKET) then ShowMessage('Funkcja socket() failed');

  //dane
  socket_adres.sin_family:= AF_INET;
  socket_adres.sin_addr.S_addr:= inet_addr('194.69.207.226'); //pcworld.pl
  socket_adres.sin_port:= htons(80);

  ErrorCode:= connect(klient, socket_adres, SizeOf(socket_adres));    //Connect()
  if (ErrorCode = SOCKET_ERROR) then ShowMessage('Funkcja connect() failed');

  //wsaAsyncSelect()
  ErrorCode:= WSAAsyncSelect(klient, handle, wm_polaczenie, FD_READ or FD_CONNECT or FD_ACCEPT);
  if (ErrorCode <> 0) then ShowMessage('WSAAsyncSelect() failed');

  zapytanie:=
    'GET /tematdnia/ HTTP/1.1' + #13#10 +
    'Host: www.pcworld.pl' + #13#10 +
    'User-Agent: Mozilla/5.0' + #13#10 +
    'Accept: text/html' + #13#10 +
   // 'Accept-Encoding:' + #13#10 +
    'Keep-Alive: 115' + #13#10 +
    'Connection: keep-alive' + #13#10 + #13#10;


  wyslano:= send(klient, zapytanie, Length(zapytanie), 0);
  if (wyslano < 0) then ShowMessage('Nie wysłano...');

end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  closesocket(klient);
  WSACleanup;
end;



procedure TForm1.OdebraneDane;
var
  buffer: array[1..4096] of Char;
begin
  recv(klient, buffer, 4096, 0);

  Form1.RichEdit1.Lines.Add('----------');
  Form1.RichEdit1.Text:= Form1.RichEdit1.Text + #13#10 + buffer;
end;

procedure TForm1.polaczenie(var Msg: TMessage);
begin
  //LParam ma FD_READ, FD_WRITE etc?
  //WParam to socket?

  case WSAGetSelectEvent(Msg.LParam) of
    FD_READ:
      begin
        OdebraneDane;
      end;
    FD_WRITE: RichEdit1.Lines.Add('write');
    FD_CLOSE: RichEdit1.Lines.Add('close');
  end;

end;


end.

Jeśli ktoś może to niech wklei to do delphi i sprawdzi lub poprawi.
Komponenty: Button i RichEdit (nazwy domyślne, standardowe).

Nie wiem, czy dobrze komunikaty obsługuję, nie wiem, czy w dobry sposób wysyłam dane. Proszę mnie poprawić jakby co.
A w snifferze nie widzę, by program wysyłał GET... (wysyła jakby coś innego?)
Będę bardzo wdzięczny za pomoc