Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Delphi para la web (https://www.clubdelphi.com/foros/forumdisplay.php?f=51)
-   -   Indy 10, propiedad connected (https://www.clubdelphi.com/foros/showthread.php?t=94863)

Punzo 07-09-2020 16:13:17

Indy 10, propiedad connected
 
Buen día a todos, alguien me podría guiar acerca de como manejar una desconexión con componentes Indy, ya que al desconectar a propósito el equipo donde está corriendo mi aplicación, y preguntar si está conectado el cliente me devuelve un error, esto lo hago con un TIdTCPClient.
Código Delphi [-]
var
  IdTCPClient1: TIdTCPClient;

procedure validacion;
begin
  if Not(IdTCPClient1.Connected) then //al llegar aquí me manda el error 'Socket Error # 10054
                                                        //Connection reset by peer.'
    ..
end;

Muchas de antemano por su ayuda

ElKurgan 09-09-2020 09:56:31

Hombre, parece claro que al estar desconectado el otro par, se produzca una excepción.

Lo más sencillo para seguir usando ese código sería hacer lo siguiente:

Código Delphi [-]
var
  IdTCPClient1: TIdTCPClient;

procedure validacion;
begin
  try
    if IdTCPClient1.Connected then 
    begin
      // lo que sea
    end;
  except  
    ShowMessage('No conectado');
    // y lo que sea...
  end;                                                       
end;
Un saludo

Punzo 10-09-2020 17:37:38

Muchas gracias por la ayuda, lo solucione de la siguiente forma, para que no me eleve una excepción, utilice una clase interpuesta con la finalidad de redefinir el método Connected, y que este me regresara True o False, dependiendo, está solución la encontré gracias a la asesoría de Al González.

Código Delphi [-]

unit UGeneral;

interface

uses
  IdTCPClient, IdStack;

  type
    TIdTCPClient = Class (IdTCPClient.TIdTCPClient)
      function Connected :Boolean; Override;
    end;

implementation

  { TIdTCPClient }

function TIdTCPClient.Connected :Boolean;
begin
  try
    Result := Inherited Connected;
    except
      on EIdSocketError do
        Result := False;
  end;
end;

end.

Espero que a alguién más le sirva, saludos.

ElKurgan 11-09-2020 11:01:41

OK, gracias por compartir

Saludos


La franja horaria es GMT +2. Ahora son las 19:57:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi