[delphi] Socket'y w WinSock

0
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Log: TListBox;
    procedure WndProc(var Msg : TMessage); override;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WndProc(var Msg : TMessage);
begin
  if Msg.Msg = WM_USER + 1 then
  begin
    Log.Items.Add('WM_USER+1');
    case WSAGETSELECTEVENT(Msg.LParam) of
      FD_ACCEPT:  Log.Items.Add('ACCEPT');
      FD_CONNECT: Log.Items.Add('CONNECT');
      FD_READ:    Log.Items.Add('READ');
      FD_WRITE:   Log.Items.Add('WRITE');
    end;
  end;
  inherited;
end;


procedure TForm1.Button1Click(Sender: TObject);
var blad:               integer;
    wersja:             word;
    wsaData:            TWSADATA;
    nasluchujacy:       TSOCKET;
    sin:                sockaddr_in;
begin
  wersja := MAKEWORD(2, 0);
  blad := WSAStartup(wersja, wsaData);

  if blad <> 0 then
  begin
    MessageBox(handle, 'error WSA', 'ERROR', MB_OK);
    WSACleanup;
  end;

  if  (LOBYTE(wsaData.wVersion) <> 2) or (HIBYTE( wsaData.wVersion ) <> 0)  then
  begin
    MessageBox(handle,'zła wersja winsocket', 'ERROR', MB_OK);
    WSACleanup;
  end;

  nasluchujacy := socket(AF_INET, SOCK_STREAM, 0);

  sin.sin_family := AF_INET;
  sin.sin_addr.s_addr := INADDR_ANY;
  sin.sin_port := htons(3023);

  if bind(nasluchujacy, sin, sizeof(sin)) = SOCKET_ERROR then
  begin
    MessageBox(handle, 'bind - błąd', 'błąd', MB_OK);
    WSACleanup;
  end;

  if listen(nasluchujacy, SOMAXCONN) = SOCKET_ERROR then
  begin
    MessageBox(handle, 'error listen' , 'ERROR', MB_OK);
    WSACleanup;
  end;
  WSAAsyncSelect(nasluchujacy, handle, WM_USER+1, FD_ACCEPT + FD_CONNECT + FD_READ + FD_WRITE);

end;

end.

Program przetłumaczyłem z c++ i nie działa [???]
Po wciśnięciu button1 powinno się coś wpisać do ListBox'a, chodzi mi dokładnie o:

Log.Items.Add('WM_USER+1');

Co jest nie tak?

0

Bardzo przepraszam za tyle tych postów [???]
Tak coś przycina tą witryne że chej :|

0

Wypisze się, gdy nastąpi jeden z eventów. Czyli dopiero, gdy przyjdzie jakieś połączenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1