PDA

Ver la Versión Completa : Chequear conexión a internet


Walterdf
06-05-2003, 20:05:33
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


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


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:


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
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)


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!