Mam problem z klientem(używam Indy Components), kiedy on wysyła komendę 333 serwer powinnien uruchomic proggram podany w Edit3 i wysłać komendę 601 potwierdzającą włączenei danego programu. Tym czasem klient zawiesza się a serwer nic nie robi. Tutaj procedura obsługująca komendy(w serwerze):
procedure TForm1.ServerExecute(AThread: TIdPeerThread);
var
H : HWND;
p, pc : Package;
begin
password := 'pass:' + Encrypt(Edit1.Text, Edit1.Text, 2);
AThread.Connection.ReadBuffer(pc, SizeOf(pc));
if not Veryficated then
begin
Memo1.Lines.Add(TimeToStr(Time) + ': Uwierzytelnianie klienta.');
if pc.pass = password then
begin
Veryficated := True;
p.cmd := Encrypt('256', Edit1.Text, 2);
AThread.Connection.WriteBuffer(p, SizeOf(p));
Veryficated := True;
Memo1.Lines.Add(TimeToStr(Time) + ': Uwierzytelnianie klienta powiodło się');
end
else
begin
p.cmd := '204';
AThread.Connection.WriteBuffer(p, SizeOf(p));
Memo1.Lines.Add(TimeToStr(Time) + ': Błąd, niepoprawne hasło');
AThread.Connection.Disconnect;
end;
end
else
begin
pc.cmd := Decrypt(pc.cmd, Edit1.Text, 2);
if pc.cmd = '333' then
begin
WinExec(PAnsiChar(Edit3.Text), sw_normal);
Memo1.Lines.Add(TimeToStr(Time) + ': Włączono OTS.');
p.cmd := Encrypt('601', Edit1.Text, 2);
AThread.Connection.WriteBuffer(p, SizeOf(p));
end
else if pc.cmd = '332' then
begin
H := FindWindow(nil, PAnsiChar(Edit2.Text));
PostMessage(H, WM_QUIT, 0, 0);
WinExec(PAnsiChar(Edit3.Text), sw_normal);
Memo1.Lines.Add(TimeToStr(Time) + ': Zrestartowano OTS.');
p.cmd := Encrypt('601', Edit1.Text, 2);
AThread.Connection.WriteBuffer(p, SizeOf(p));
end
else if pc.cmd = '331' then
begin
H := FindWindow(nil, PAnsiChar(Edit2.Text));
PostMessage(H, WM_QUIT, 0, 0);
Memo1.Lines.Add(TimeToStr(Time) + ': Wyłączono OTS.');
p.cmd := Encrypt('603', Edit1.Text, 2);
AThread.Connection.WriteBuffer(p, SizeOf(p));
end;
end;
end;
A to procedura wysyłająca komendę(w kliencie):
procedure TForm1.Button3Click(Sender: TObject);
var
pc,p : Package;
begin
pc.cmd := Encrypt('333', password, 2);
if IdTCPClient1.Connected then
begin
IdTCPClient1.WriteBuffer(pc, SizeOf(pc));
Memo1.Lines.Add(TimeToStr(Time) + ': Wysłano komendę uruchomienia serwera.');
IdTCPClient1.ReadBuffer(p, SizeOf(p));
p.cmd := Decrypt(p.cmd, password, 2);
if p.cmd = '601' then
Memo1.Lines.Add(TimeToStr(Time) + ': Włączono serwer.');
end;
end;
Co mam zrobić żeby wreszcie zaczęło to działać?