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?