PDA

Ver la Versión Completa : Indy 10, propiedad connected


Punzo
07-09-2020, 16:13:17
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.

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:

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.



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