Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   reintentar a las 20 minutos si la conexion con la web falla (https://www.clubdelphi.com/foros/showthread.php?t=70456)

petete2008 21-10-2010 19:34:47

reintentar a las 20 minutos si la conexion con la web falla
 
hola,
estoy usando delphi 7 y haciendo una aplicación que me abra una url desde delphi y que si en 30 segundos no se carga ( por ejemplo : servidor ocupado ) me aparezca un mensaje en pantalla diciendo que no ha sido posible establecer conexión con la página.
Pongo el tope de 30 segundos porque hay unas páginas que tardan más que otras en cargar.

La segunda parte es que reintente a los 20 minutos, pero de momento me conformo con conseguir la primera parte porque la segunda creo que sería capaz de hacerlo con un TIMER.

Gracias de antemano a cualquier ayuda.

Neftali [Germán.Estévez] 22-10-2010 11:01:23

¿Cómo estás haciendo la carga de la página?
¿Algun componente? ¿Externo, con ShellExecute?

petete2008 22-10-2010 11:09:41

Código:

function DownloadToStream(Url: string; Stream: TStream): Boolean;
var
  hNet: HINTERNET;
  hUrl: HINTERNET;
  Buffer: PChar;
  BytesRead: DWORD;
  i: Integer;
begin
  Result := FALSE;
  hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (hNet <> nil) then
  begin
    hUrl := InternetOpenUrl(hNet, PChar(Url), nil, 0,
      INTERNET_FLAG_RELOAD, 0);
    if (hUrl <> nil) then
    begin
      GetMem(Buffer,100*1024);
      try
        while (InternetReadFile(hUrl, Buffer, 100*1024, BytesRead)) do
        begin
          if (BytesRead = 0) then
          begin
            Result := TRUE;
            break;
          end;
          // Aqui sustituimos el caracter nulo por un espacio
          for i:= 0 to BytesRead - 1 do
            if Buffer[i] = #0 then
              Buffer[i]:= #32;
          Stream.WriteBuffer(Buffer^,BytesRead);
        end;
      finally
        FreeMem(Buffer);
      end;
      InternetCloseHandle(hUrl);
    end;
    InternetCloseHandle(hNet);
  end;
end;

    try
      DownloadToStream(url,Stream);
      Memo1.Lines.Text:= Stream.DataString;
    finally
      Stream.Free;
 
    end;

Quiero que si la web no responde, en 30 segundos se detenga y se quede a la espera durante 30 minutos hasta que vuelva a intentarlo de nuevo.
Gracias

Neftali [Germán.Estévez] 22-10-2010 11:17:36

¿Y cuando tarda más de 30 segundos en qué punto de ese procedimiento se queda parado?
¿los has ejecutado paso a paso?

petete2008 22-10-2010 16:32:50

lo he solucionado con un
try
...
except
..
finally

de esta forma si no conecta con la web por el motivo que sea me lleva a otras sentencias donde puedo indicarle que vuelva a intentarlo pasados 30 minutos.

gracias!!


La franja horaria es GMT +2. Ahora son las 06:48:23.

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