Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Chequear conexión a internet (https://www.clubdelphi.com/foros/showthread.php?t=130)

Walterdf 06-05-2003 20:05:33

Chequear conexión a internet
 
Hola
Necesito bajar un archivo de una página de internet desde mi aplicación, y lo hice de la siguiente manera

try
stream:= TFileStream.Create('c:\miarchivo.txt',fmCreate);
idhttp1.Get('http://www.mipagina.com/miarchivo.txt',stream);
finally
stream.Free;
end;

Si la máquina está conectada a internet lo hace perfectamente pero, lógicamente, cuando no lo está me da el error: "Socket Error #1001", lo que yo quisiera es que el programa no se interrumpa si la conexión no está disponible, no se si existe alguna manera de manejar ese error como para que salte a otra línea.
Probé con chequear antes la conexión mediante un par de trucos que encontré en trucomanía pero no funcionaron.
Muchas gracias.
Walter

__cadetill 06-05-2003 20:18:54

al igual te sirve el truco 448 de Trucomania. Echale una ojeada a ver

Walterdf 06-05-2003 21:07:39

Ya probé ese truco, yo tengo conexión LAN y cuando desconecto el cable me sigue dando como que está conectado, ademas varia el .dll (Shell32.dll, URL.dll, etc) según el Windows que se esté usando y mi aplicación es para distribuirla, es decir, que no se en que Windows se utilizará. :(
De todos modos, agradezco mucho tu respuesta.
Salu2.
Walter

__hector 06-05-2003 21:14:07

Tienes el codigo dentro de un try/except, asi que esa excepcion que te salta no debe aparecer fuera del IDE de delphi. Si corres el ejecutable seguro no salta ese error.

Puedes ademas desabilitar la parada del sistema en delphi en el menu tools/debbuger options/language exceptios/stop on delphi exceptions

Walterdf 06-05-2003 21:25:48

Hector
No es try...except, es try...finally, e intenté tambien lo vos me decis acerca de deshabilitar esa opción pero sigue dando el mismo error aún desde el .exe
Justamente lo que no se es como poner eso mismo en un try...except.
Gracias
Walter

__cadetill 06-05-2003 21:32:58

prueba con esto a ver que tal

Código:

try
  try
    stream:= TFileStream.Create('c:\miarchivo.txt',fmCreate);
    idhttp1.Get('http://www.mipagina.com/miarchivo.txt',stream);
  finally
      stream.Free;
  end;
except
end;

esto te tendria que capturar sin problemas la exception

Walterdf 06-05-2003 21:59:55

EXCELENTE!!!, GRACIAS A AMBOS POR SU AYUDA.
SALUDOS
WALTER

jachguate 07-05-2003 03:28:39

Solo una acotación.

Si haces un

Código:

try
  mioperacion;
except
end;

no te dejará salir ninguna exepcion, y puede que la operación falle por algo que no está bajo tu control, por eso es buena practica ser mas específico acerca del error que se quiere tratar, para dejar que la maquinaria de delphi se encargue de los demás.

seria mas correcto hacer:

Código:

try
  MiOperacion;
except
  on ElErrorQueYoControlo do
    AlgunCodigoONoHacerNadaParaMatarLaExcepcion;
end;


Hasta luego.

DanielAlexander 13-05-2003 17:31:39

hola!!!!!
Me interesó mucho el programa que hiciste para conectarte a internet, lo que necesitaría saber es que componentes utilizaste.
Muchas gracias.

Walterdf 13-05-2003 19:03:07

Hola Daniel
Mirá, lo que yo hice NO fue un programa para conectarse a internet, simplemente baja un archivo de una dirección web pero la pc ya debe estar conectada de lo contrario me tira el mensaje "Socket Error". Lo que si hice es que si se produce ese error que el programa no se pare, sino que lo salte ese error y no baje el archivo.
De todas formas te cuento que el componente que utilizo es un componente Indy Client (TidHttp) y el código que utilizo es:

var
stream: Tfilestream;

try
stream:= TFileStream.Create('c:\miarchivo.txt',fmCreate);
idhttp1.Get('http:www.mipagina.com/miarchivo.txt',stream);
finally
stream.Free;
end;

En la página de trucomanía tenés un par de códigos para verificar la conexión, a lo mejor a vos te sirven: www.q3.nu/trucomania
Espero haberte ayudado.
Saludos.
Walter

DanielAlexander 13-05-2003 22:21:08

Gracias Walterdf
Funcionó bien.

__hector 14-05-2003 02:27:32

Jeje, por cierto, no es try/finally, sino try/finally/except, pero el finally no le veia la utilidad en tu caso, sin embargo si el except (para controlar la excepcion, no? :D )

delphi.com.ar 14-05-2003 03:36:00

Cita:

Posteado originalmente por hector
el finally no le veia la utilidad en tu caso,
¿Cómo que no?... el Finally le garatiza que siempre se ejecute el free, sinó si se produce un error nunca se va a liberar el Stream.

Un comentario: si van a hacer un except vacío, solo para que capture el error, también se podría hacer esto (aunque no lo recomiendo)

Código:

stream:= TFileStream.Create('c:\miarchivo.txt',fmCreate);
try
  idhttp1.Get('http://www.mipagina.com/miarchivo.txt',stream);
except
end;
stream.Free;

Y haría otra aclaración, el create del objeto, va fuera del try.., porque si no se crea el objeto porque produce un error, no quedará asignado a la variable.

Saludos!


La franja horaria es GMT +2. Ahora son las 12:11:19.

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