Conexao TCP

Delphi

23/09/2013

Boa tarde,

Estou precisando criar uma rotina onde terei minha aplicação no servidor de banco de dados e terei meus terminais, um desses terminais vai ter o banco de dados bkp.

Ai é que vem a duvida, como faço para monitorar a conexão TCP, ou seja, a aplicação vai estar rodando, quando a conexão cair com o servidor quero acionar este terminal local que esta como banco de dados apenas com os cadastros atualizados.

Se alguém puder me dar uma dica fico agradecido.

MArcos
Marcos Amaral

Marcos Amaral

Curtidas 0

Respostas

Marcos Amaral

Marcos Amaral

23/09/2013

Complementando, estou usando o Delphi XE3....
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

Bom dia,

Esse fórum aqui já foi bom.........


Grato


GOSTEI 0
Marcos Oliveira

Marcos Oliveira

23/09/2013

Bom dia Amigo! Este fórum continua bom. Só que nem sempre conseguimos responder com a rapidez que você precisa.

Segue abaixo um código que creio irá te ajudar.

// Você precisará de um componente TIdIcmpClient (IndyClients)
function TForm1.Pingar(IP: String): Boolean;
begin
     Result := True;
     try
        IdICMPClient1.Host := IP;
        IdICMPClient1.ReceiveTimeout := 1000; // Configure com o tempo que achar conveniente.
        IdICMPClient1.Ping;
     except
        Result := False;
     end
end;

// Para monitorar, é só usar um Timer.
procedure TForm1.Button1Click(Sender: TObject);
begin
     if Pingar(edit1.text) then
        ShowMessage('Ok')
     else
        ShowMessage('Erro');
end;



Att,

Marcos
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

Bom dia, Marcos,

Então meu amigo estou criando outro sistema onde terei um servidor no escritório do cliente e outro servidor como se fosse BKP no local, esse segundo servidor vai funcionar para controle de equipamentos e no local, e toda a base de dados vai estar no servidor principal.

O que eu preciso fazer quando essa comunicação venha cair vou acionar o segundo servidor. Trocando todas as conexões automaticamente tanto do servidor como dos clients.

Mais uma vez agradeço sua ajuda Marcão..


Abraços
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

23/09/2013

Entendi sua situação. Com a função que te passei, você consegue verificar se o servidor caiu. Se sim, você deve reconfigurar a conexão (alterar o ip do host) do seu sistema para o servidor alternativo.
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

Marcao,


Muito obrigado era isso mesmo que eu queria.....

Abraços
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

Marcao, boa noite, desculpa te incomodar.

Fiz a rotina e quando pingo, diz que o acesso negado.

O que pode ser?

Abraços

Marcos

GOSTEI 0
Marcos Oliveira

Marcos Oliveira

23/09/2013

Marcos, por acaso você consegue acessar a rede normalmente? Tenta dar um ping pelo CMD, porque aí vamos saber se problema é no Delphi, ou na sua rede. Se der erro ao pingar pelo CMD, então o problema é na rede.

Att,

Marcos
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

Bom dia Marcao,

Pelo cmd pingo certinho, tanto minha maquina local como a maquina remota, nesta maquina remota pingo pelo Host sisgfrotamg.zapto.org.

Agradeço sua ajuda, sabe como é marinheiro de primeira viagem....

abraços

GOSTEI 0
Marcos Oliveira

Marcos Oliveira

23/09/2013

Marcos, tentei pingar o host que você me passou, e funcionou perfeitamente, tanto pelo cmd quanto pelo exemplo que te passei.
Você tentou executar seu projeto como administrador?

Att,

Marcos
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

Não eu fiz a rotina que você me passou e deu a mensagem access denied. Fiz em casa, o roteador esta liberado tudo certinho tanto que pelo componente do zeos consigo conectar certinho.

Estranho
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

Olha o código, unica coisa que coloquei foi a porta que é do FireBird 3050

function TForm1.Pingar(IP: String): Boolean;
begin
Result := True;
try
IdICMPClient1.Host := IP;
IdICMPClient1.ReceiveTimeout := 1000; // Configure com o tempo que achar conveniente.
IdICMPClient1.Port := 3050;
IdICMPClient1.Ping;
except
Result := False;
end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Pingar(edit1.text) then
ShowMessage('Ok')
else
ShowMessage('Erro');
end;
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

no IP coloquei o sisgfrotamg.zapto.org
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

23/09/2013

Muito estranho mesmo... Peguei agora a sua rotina, criei um novo pronto, coloquei o host, e tá pingando normal...
Até mudei o host pra ver se o programa sempre retornava true, mas aí deu erro. Voltei pro seu host, e funcionou.
Qual Delphi você usa?
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

XE3 Update 2
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

23/09/2013

Achei que poderia ser uma versão mais antiga do seu Indy, mas não é o seu caso.
Procurei alguns tópicos na internet, e algumas pessoas disseram que poderia ser permissão de acesso, por não ter direitos de administrador.
Você está logado com administrador?
GOSTEI 0
Marcos Amaral

Marcos Amaral

23/09/2013

Realmente Marcão, é o ADM mesmo, funfou........


Mais uma vez obrigado.

Vou mudar meu usuario.....

Abraços
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

23/09/2013

Por nada... Precisando, estou à disposição.
GOSTEI 0
POSTAR