Mam dwie apliakcje, serwer i klient, zbudowane w oparciu o komponenty IdTcpClient i IdTcpServer, gdy na serwerze wcisnę buttona to na kliencie ma zostać wykonana konkretna funkcja (w przykładzie nazwa funkcji to przykladowa_funkcja ;] )
SERWER:
var
funkcja_request : boolean = false;
//przycisk z żądaniem aby na kliencie została wykonana funkcja
procedure TForm1.Button2Click(Sender: TObject);
begin
funkcja_request := true;
end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
pakiet : string;
Begin
pakiet := AThread.Connection.ReadLn;
if (pakiet = 'i') and (procedura_request = true) then
begin
AThread.Connection.WriteLn('call');
funkcja_request := false;
end;
end;
KLIENT:
procedure TForm1.FormActivate(Sender: TObject);
begin
try
local := true;
IdTcpClient1.Host := 192.168.0.1 ; //przykładowy adres serwera
IdTCPClient1.Connect;
except
;
end;
end;
// komponent timer ustawiony interwał czasowy na 7000, co jakiś czas sprawdza czy na serwerze zarządano wykonania funkcji
procedure TForm1.Timer2Timer(Sender: TObject);
var
pakiet_klient : string;
Begin
if (IdTCPClient1.Connected = true) then
begin
pakiet_klient := 'i';
IdTCPClient1.WriteLn(pakiet_klient);
pakiet_klient := IdTCPClient1.ReadLn;
if pakiet_klient = 'call' then
begin
IdTCPClient1.Disconnect;
przykladowa_funkcja;
end;
end;
end;
Problem: Wszystko działa dobrze, ale tylko w połaczeniu z jednym klientem (funkcja wykona się na jednym kliencie, na reszcie aplikacji klienckich nie (dopiero po zamknięciu klienta na którym funkcja została uruchomiona itd.)), męczę sie z tym ponad miesiąc i nic [glowa]
będę wdzięczny za każdą konstruktywną pomoc [browar] / [soczek]