ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Socket Error - Indy

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
mastersoftware
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 30 de Mai de 2008
Mensagens: 187

MensagemEnviada: Sex Jul 10, 2020 10:16 am    Assunto: Socket Error - Indy Responder com Citação

Bom dia pessoal,
Atualmente utilizo o componente Indy para fazer a seguinte requisição, da seguinte forma

Var
getTicker: TIdHTTP;
begin
try
try
IdSSLIOHandlerSocketOpenSSL1 :=
TIdSSLIOHandlerSocketOpenSSL.Create(nil);
getTicker := TIdHTTP.Create(nil);
getTicker.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
getTicker.Request.UserAgent := 'Mozilla/5.0 (compatible; test)';
getTicker.ConnectTimeout := 30000;
getTicker.Get('www.result/ticker24hs');
except
finally
FreeAndNil(getTicker);
end;

Este processo executa de hora em hora.
Porém de vez em quando, cai a conexão com a internet, é exibido a mensagem em abaixo :

Socket Error # 11001
Host not found

Dai então a aplicação para de executar.
Preciso que após este problema de conexão, a aplicação continue a executar o processo de hora em hora.
Porém fiz alguns testes aqui, mas sem sucesso, alguém saberia como poderia fazer isso ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
allanbrrj
Novato
Novato


Registrado: Terça-Feira, 23 de Junho de 2020
Mensagens: 26

MensagemEnviada: Ter Jul 14, 2020 11:33 am    Assunto: Responder com Citação

Bom dia, a Paz do Senhor Jesus.

Não sei como está implementado essa rotina no seu programa, eu vou sugerir que faça um singleton. Creio que esse problema irá parar.

Código:

unit uTicket;

interface

uses
   IdHTTP, IdSSLOpenSSL;

type
   ITicket = interface
      ['{1A4F0CA6-A985-4633-8396-930542EC5E39}']
      function checar_internet: ITicket;
      function fazer_algo: Boolean;
   end;

   TTicket = class(TInterfacedObject, ITicket)
   private
      FgetTicker  : TIdHTTP;
      FSSL        : TIdSSLIOHandlerSocketOpenSSL;
      FTemInternet: Boolean;

   public
      constructor Create;
      destructor Destroy; override;

      function checar_internet: ITicket;
      function fazer_algo: Boolean;

      class function New: ITicket;
   end;

implementation

uses
   System.SysUtils;

{ TTicket }

function TTicket.checar_internet: ITicket;
begin
   Result := Self;

   // Escreva aqui sua rotina para testar a internet, caso deseje.
end;

constructor TTicket.Create;
begin
   FgetTicker := TIdHTTP.Create(nil);
   FSSL       := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

   FgetTicker.IOHandler := FSSL;

   FgetTicker.Request.UserAgent := 'Mozilla/5.0 (compatible; test)';
   FgetTicker.ConnectTimeout    := 30000;

   FTemInternet := False;
end;

destructor TTicket.Destroy;
begin
   if Assigned(FgetTicker) then
      FgetTicker.Destroy;

   if Assigned(FSSL) then
      FSSL.Destroy;

   inherited;
end;

function TTicket.fazer_algo: Boolean;
begin
   if FTemInternet then
   begin
      try
         FgetTicker.Get('www.result/ticker24hs');
         Result := True;
      except
         on E: Exception do
            Result := False;
      end;
   end;
end;

class function TTicket.New: ITicket;
begin
   Result := Self.Create;
end;

end.


Claro terá que importar o unit para usar.
Ai na sua rotina de check de hora em hora fica assim.
Código:

TTicket.New.checar_internet.fazer_algo;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB