|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
mastersoftware Aprendiz
Registrado: Sexta-Feira, 30 de Mai de 2008 Mensagens: 187
|
Enviada: Sex Jul 10, 2020 10:16 am Assunto: Socket Error - Indy |
|
|
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 |
|
|
allanbrrj Novato
Registrado: Terça-Feira, 23 de Junho de 2020 Mensagens: 26
|
Enviada: Ter Jul 14, 2020 11:33 am Assunto: |
|
|
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 |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|