Code:
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Winsock;
type
TForm5 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type TServerThread=class(TThread)
public
wsock_port:integer;
wsock_Data:TWSAData;
wsock_Error:integer;
m_Socket:TSocket;
AcceptSocket:TSocket;
ServerService:SockAddr_in;
constructor Create(port:integer);
procedure SynError;
procedure SynSuccess(msg:String);
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
constructor TServerThread.Create(port:integer);
begin
inherited Create(false);
wsock_error:=WSAStartUp(2,wsock_Data);
if wsock_error<>0 then Synchronize(SynError) else
begin
m_socket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if m_socket<>SOCKET_ERROR then
begin
ServerService.sin_family:=AF_INET;
ServerService.sin_addr.s_addr:=inet_addr('127.0.0.1');
ServerService.sin_port:=htons(port);
bind(m_socket,ServerService,SizeOf(ServerService));
listen(m_socket,1);
SynSuccess('Cekam klijenta da se spoji!');
AcceptSocket:=SOCKET_ERROR;
while AcceptSocket=SOCKET_ERROR do
begin
AcceptSocket:=accept(m_socket,nil,nil);
end;
SynSuccess('Klijent je uspjesno spojen!');
m_socket:=AcceptSocket;
end;
end;
end;
procedure TServerThread.SynError;
begin
Form5.Memo1.Lines.Add('Error with WinSock!');
end;
procedure TServerThread.SynSuccess(msg:String);
begin
Form5.Memo1.Lines.Add(msg);
end;
procedure TForm5.Button1Click(Sender: TObject);
var MT:TServerThread;
begin
MT:=TServerThread.Create(13);
MT.Terminate;
MT.Free;
end;
end.
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Winsock;
type
TForm5 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type TServerThread=class(TThread)
public
wsock_port:integer;
wsock_Data:TWSAData;
wsock_Error:integer;
m_Socket:TSocket;
AcceptSocket:TSocket;
ServerService:SockAddr_in;
constructor Create(port:integer);
procedure SynError;
procedure SynSuccess(msg:String);
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
constructor TServerThread.Create(port:integer);
begin
inherited Create(false);
wsock_error:=WSAStartUp(2,wsock_Data);
if wsock_error<>0 then Synchronize(SynError) else
begin
m_socket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if m_socket<>SOCKET_ERROR then
begin
ServerService.sin_family:=AF_INET;
ServerService.sin_addr.s_addr:=inet_addr('127.0.0.1');
ServerService.sin_port:=htons(port);
bind(m_socket,ServerService,SizeOf(ServerService));
listen(m_socket,1);
SynSuccess('Cekam klijenta da se spoji!');
AcceptSocket:=SOCKET_ERROR;
while AcceptSocket=SOCKET_ERROR do
begin
AcceptSocket:=accept(m_socket,nil,nil);
end;
SynSuccess('Klijent je uspjesno spojen!');
m_socket:=AcceptSocket;
end;
end;
end;
procedure TServerThread.SynError;
begin
Form5.Memo1.Lines.Add('Error with WinSock!');
end;
procedure TServerThread.SynSuccess(msg:String);
begin
Form5.Memo1.Lines.Add(msg);
end;
procedure TForm5.Button1Click(Sender: TObject);
var MT:TServerThread;
begin
MT:=TServerThread.Create(13);
MT.Terminate;
MT.Free;
end;
end.
Nisam koristion Synchronize(SynError) jer bi se onda bezbroj puta taj string dodavao u memo (ne znam zasto) i program bi puko jer bi se preopteretila stack memorija..
I zasto ne mogu pozvat Synhroznize(Ime_Procedure(neki_parametar))...
p0z