Problem z klientem

0

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ć?

0

Aby klient się nie zawieszał proponuje wrzucić na formę kontrolkę TIdAntiFreeze

0

Już znalazłem błąd, dziękuje za wszytko. Błąd polegał na tym, że szyfrowałem w kliencie nie tym ciągiem znaków co szyfrował serwer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1