Rozłanczanie IdTCPClient

0

Mam następujące pytanie, dlaczego jak używam poniższego kodu (który działa) to program po pierwszym nacisniecu sie połączy a po drugim rozłączy (i jeszcze kilka zeczy) jednak po rozłączeniu pokazuje komunikaty o tej samej streści: "Not connected" i nie wiem czym to jest spowodowane ... Czy moze mi ktos w tej kwestii pomoc ??

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if (edUserName.Text ) and (edServer.Text ) and SpeedButton1.Down then
begin
IdTCPClient1.Host := edServer.Text; //przypisanie adresu hosta z edita
IdTCPClient1.Port := sePort.Value; //przypisanie portu z edita
if SpeedButton1.Down = true then
IdTCPClient1.Connect; //połaczenie z serverem
edUserName.Enabled:=false;
edServer.Enabled:=false;
sePort.enabled:=false;
IdTCPClient1.WriteLn('@' + 'CLIENTS:REQUEST'); //odswiezenie listy podlaczonych
end else
begin
if (edUserName.Text = ) or (edServer.Text = ) then
ShowMessage('Pola z nazwą użytkownika i adresem servera nie moga byc poste !!!');
SpeedButton1.Down := false;
edUserName.Enabled:=true;
edServer.Enabled:=true;
sePort.enabled:=true;
end;
if SpeedButton1.Down = false then begin
timer2.Enabled:=false;
timer1.Enabled:=false;
IdTCPClient1.disconnect;
edUserName.Enabled:=true;
edServer.Enabled:=true;
sePort.enabled:=true;
lbClients.items.Clear;
memLines.Lines.Add('Połączenie z serveren zostało zerwane ...');
exit;
end;
end;

0

procedure TForm1.SpeedButton1Click(Sender: TObject);
var czyconnected:boolean=false;
begin
if (edUserName.Text ) and (edServer.Text ) czyconnected then
begin
czyconnected:=false;
IdTCPClient1.Host := edServer.Text;
IdTCPClient1.Port := sePort.Value;
if SpeedButton1.Down = true then
IdTCPClient1.Connect;
edUserName.Enabled:=false;
edServer.Enabled:=false;
sePort.enabled:=false;
end else
begin
if (edUserName.Text = ) or (edServer.Text = ) then
ShowMessage('Pola z nazwą użytkownika i adresem servera nie moga byc poste !');
czyconnected:=true;
SpeedButton1.Down := false;
edUserName.Enabled:=true;
edServer.Enabled:=true;
sePort.enabled:=true;
end;
if czyconnected = false then begin
timer2.Enabled:=false;
timer1.Enabled:=false;
IdTCPClient1.disconnect;
edUserName.Enabled:=true;
edServer.Enabled:=true;
sePort.enabled:=true;
end;
end;

sam juz niewime :/

0

Drajwer niestety twój kod nawet nie pruboje łączyć ...

0

"Not connected" masz tez przy tym jak laczysz sie z SMTP wiec mzoe tto byc spowodowane uzywaniem portu w danej chwili lub wlaczenie firewalla lub po prostu Blad prorgamu ;-)

0

To najwyraźniej to ostatnie, tylko nie wiem gdzie popelniłem bład w w/w kodzie który odpowiada za łączenie i rozłanczanie ...

0

Troszke nagmatwales w tym kodzie, trudno sie polapac. Moze sprobuj tak:

if (edUserName.Text = ) or (edServer.Text = ) then begin
ShowMessage('Pola z nazwą użytkownika i adresem servera nie moga byc poste !');
Exit;
end;

if not IdTCPClient1.Connected then
begin
IdTCPClient1.Host := edServer.Text;
IdTCPClient1.Port := sePort.Value;
IdTCPClient1.Connect;
edUserName.Enabled:=false;
edServer.Enabled:=false;
sePort.enabled:=false;
IdTCPClient1.WriteLn('@' + 'CLIENTS:REQUEST');
end
else
begin
edServer.Enabled:=true;
edUserName.Enabled:=true;
sePort.enabled:=true;
timer2.Enabled:=false;
timer1.Enabled:=false;
lbClients.items.Clear;
IdTCPClient1.disconnect;
memLines.Lines.Add('Połączenie z serveren zostało zerwane ...');
end;

Szczerze mowiac nie chce mi sie tego sprawdzac, ale na 1 rzut oka powinno byc dobrze :) :

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