delphi indy client
Napsal: úte 6. bře 2007, 13:22
potrebujem urobit aplikaciu server/client kde na server sa poslu nejake data ,ktore sa spracuju a clienti budu nasluchat v urcitych intervaloch ci server nieco neposlal, aj by to mozno fungovalo len keby ten client nezamrzne alebo sa zasekne, ja neviem , poradte prosim co s tym
-v tomto prilkade posle niektory klient nejaky text a server to posle vsetkym s otaznikmi na konci textu
server:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var s:string;
begin
s:=athread.Connection.ReadLn;
memo1.Lines.Add(s);
sende(s);
end;
procedure tform1.sende(s:string);
var c:integer;
list:tlist;
begin
list:=idtcpserver1.Threads.LockList;
try
for c:=0 to list.Count-1 do
try
if tidpeerthread(list.Items[c]).Connection.Connected then
tidpeerthread(list.Items[c]).Connection.WriteLn(s+' ????');
except
tidpeerthread(list.Items[c]).Stop;
end;
finally
idtcpserver1.Threads.UnlockList;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not idtcpserver1.Active then begin
idtcpserver1.DefaultPort:=5050;
idtcpserver1.Bindings.Clear;
with idtcpserver1.Bindings.Add do port:=5050;
end;
if not idtcpserver1.Active then idtcpserver1.Active:=true;
end;
client:
procedure TForm1.Button1Click(Sender: TObject);
begin
if not idtcpclient1.connected then begin
idtcpclient1.Host:='127.0.0.1';
idtcpclient1.Port:=5050;
idtcpclient1.Connect;
timer1.Enabled:=true;
end else begin
timer1.Enabled:=false;
idtcpclient1.Disconnect;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var s:string;
begin
if idtcpclient1.Connected then begin
s:=idtcpclient1.ReadLn('',5);
if s<>'' then memo1.Lines.Add(s);
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key=#13) and idtcpclient1.Connected then idtcpclient1.WriteLn(edit1.Text);
end;
-v tomto prilkade posle niektory klient nejaky text a server to posle vsetkym s otaznikmi na konci textu
server:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var s:string;
begin
s:=athread.Connection.ReadLn;
memo1.Lines.Add(s);
sende(s);
end;
procedure tform1.sende(s:string);
var c:integer;
list:tlist;
begin
list:=idtcpserver1.Threads.LockList;
try
for c:=0 to list.Count-1 do
try
if tidpeerthread(list.Items[c]).Connection.Connected then
tidpeerthread(list.Items[c]).Connection.WriteLn(s+' ????');
except
tidpeerthread(list.Items[c]).Stop;
end;
finally
idtcpserver1.Threads.UnlockList;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not idtcpserver1.Active then begin
idtcpserver1.DefaultPort:=5050;
idtcpserver1.Bindings.Clear;
with idtcpserver1.Bindings.Add do port:=5050;
end;
if not idtcpserver1.Active then idtcpserver1.Active:=true;
end;
client:
procedure TForm1.Button1Click(Sender: TObject);
begin
if not idtcpclient1.connected then begin
idtcpclient1.Host:='127.0.0.1';
idtcpclient1.Port:=5050;
idtcpclient1.Connect;
timer1.Enabled:=true;
end else begin
timer1.Enabled:=false;
idtcpclient1.Disconnect;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var s:string;
begin
if idtcpclient1.Connected then begin
s:=idtcpclient1.ReadLn('',5);
if s<>'' then memo1.Lines.Add(s);
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key=#13) and idtcpclient1.Connected then idtcpclient1.WriteLn(edit1.Text);
end;