Verificar conexão com Socket
Moderador: Moderadores
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Verificar conexão com Socket
Bom dia Pessoal,
Como faço para saber se uma conexão com o Socket ainda está ativa ?
Tentei usando INETSTATUS() porem conectado ou desconectado ele sempre retorna(1) conexão ativa.
Se alguém tiver alguma dica agradeço.
Como faço para saber se uma conexão com o Socket ainda está ativa ?
Tentei usando INETSTATUS() porem conectado ou desconectado ele sempre retorna(1) conexão ativa.
Se alguém tiver alguma dica agradeço.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Verificar conexão com Socket
Leonardo,
Achei este código, não testei.
Achei este código, não testei.
Código: Selecionar todos
if inetinit()
? m->pSocket := iNetConnect( 'www.google.com', 80 )
IF INetErrorCode( m->pSocket ) <> 0
? "Socket error:", INetErrorDesc( m->pSocket )
? 'cleanup', INetCleanUp()
QUIT
ENDIF
?'status ', INETSTATUS( m->pSocket )
? if( INetClose( m->pSocket ) == 0, ' INTERNET OK!', ' NO INTERNET!
' )
?'cleanup ',inetcleanup()
endif
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Verificar conexão com Socket
Tem esse teste aqui:
Código: Selecionar todos
/*****************************************************
* Check to see if you can connect to a Url
* Also it could be used to determine if internet access is available
* ( Based on test code found into C:\HARBOUR\contrib\hbtip\tests\ )
* Pete D.: 17/07/2010
*/
#include "hbclass.ch"
#include "tip.ch"
PROCEDURE MAIN( cUrl )
LOCAL lIsInternet
cUrl := IIF(Empty(cUrl), 'http://www.google.com', cUrl)
Set Color to w+/b
CLEAR SCREEN
lIsInternet := ConnectTo( cUrl ) // q.: and what if google.com goes
down? 8-)
? "Internet available: " + HB_ValToExp( lIsInternet )
wait
Return
**************************
Function ConnectTo( cUrl )
**************************
LOCAL oUrl, oClient, cData, cMess
Local lRet := .f.
Begin Sequence
IF Empty( cUrl )
Break
ENDIF
oUrl := tURL():New( cUrl )
IF Empty( oUrl )
Alert( "Invalid url " + cUrl )
Break
ENDIF
oClient := TIpClientHttp():new( oUrl )
IF Empty( oClient )
Alert( "Invalid url " + cUrl )
Break
ENDIF
oClient:nConnTimeout := 2000 // Here!
IF oClient:Open()
IF Empty( oClient:cReply )
cData := oClient:Read()
IF ! Empty( cData )
cMess := "Connection status: <connected> & <reading ok!>"
lRet := .T.
ELSE
cMess := "Connection status: <Not connected>/<Not able to read>
(Check line/cables/netcards/firewalls et.c.)"
ENDIF
Alert( "Connection last responce:" +
HB_ValToExp(oClient:lastErrorMessage()) + HB_OSNewline() + cMess )
ELSE
Alert( "Connection status: " + oClient:cReply )
ENDIF
oClient:Close()
ELSE
Alert( "Can't open URL " + cUrl + ;
IIF( ! Empty( oClient:cReply ), HB_OSNewLine() +
oClient:cReply, '' ) )
ENDIF
End Sequence
RETURN lRet
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Verificar conexão com Socket
Obrigado pelos exemplos Asimoes. O primeiro eu já havia tentado, acontece que ele demora muita para testar e se diminuo o timeout ele me devolve uma resposta errada.
Vou testar o segundo, de momento muito obrigado.
Vou testar o segundo, de momento muito obrigado.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Verificar conexão com Socket
Olá Leonardo,
Vc tentou usar INetDataReady(Socket)? Parece que retorna -1 se a conexão falhar.
Vc tentou usar INetDataReady(Socket)? Parece que retorna -1 se a conexão falhar.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Verificar conexão com Socket
Olá Asimoes,
Apenas para lhe avisar que não deu certo sua segunda rotina, ela serve apenas para link que HTTP, e no meu caso é uma conexão com um dispositivo que não tem protocolo http apenas TCP/IP.
Olá Jairo,
Eu testei agora com essa função e quando desligo o cabo da rede ele continua me retornando ZERO que não tem nada para receber, em vez de gerar um valor NEGATIVO de erro, meu problema que tenho que saber se ainda está conectado antes de receber ou enviar alguma informação, é um dispositivo que ficara conectado o dia todo, e caso cair a conexão tenho que reconectar imediatamente.
Se alguém mais tiver alguma dica agradeço.
Apenas para lhe avisar que não deu certo sua segunda rotina, ela serve apenas para link que HTTP, e no meu caso é uma conexão com um dispositivo que não tem protocolo http apenas TCP/IP.
Olá Jairo,
Eu testei agora com essa função e quando desligo o cabo da rede ele continua me retornando ZERO que não tem nada para receber, em vez de gerar um valor NEGATIVO de erro, meu problema que tenho que saber se ainda está conectado antes de receber ou enviar alguma informação, é um dispositivo que ficara conectado o dia todo, e caso cair a conexão tenho que reconectar imediatamente.
Se alguém mais tiver alguma dica agradeço.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Verificar conexão com Socket
Leonardo,
Você poderia usar até o netio para isso, mas teria que ter o server rodando em todas as máquinas ou na máquina que você quer testar a conexão:
Pensei neste exemplo do netio que testa a conexão com o servidor, talvez uma adaptação resolva.
Esse ip que você testa é de uma rede interna ou externa (internet)?
#define DBSERVER "127.0.0.1"
#define DBPORT 2941
#define DBPASSWD "topsecret"
pSockSrv := netio_mtserver( DBPORT,,, /* RPC */ .T., DBPASSWD )
if empty( pSockSrv )
? "Cannot start NETIO server !!!"
wait "Press any key to exit..."
quit
endif
Você poderia usar até o netio para isso, mas teria que ter o server rodando em todas as máquinas ou na máquina que você quer testar a conexão:
Pensei neste exemplo do netio que testa a conexão com o servidor, talvez uma adaptação resolva.
Esse ip que você testa é de uma rede interna ou externa (internet)?
#define DBSERVER "127.0.0.1"
#define DBPORT 2941
#define DBPASSWD "topsecret"
pSockSrv := netio_mtserver( DBPORT,,, /* RPC */ .T., DBPASSWD )
if empty( pSockSrv )
? "Cannot start NETIO server !!!"
wait "Press any key to exit..."
quit
endif
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Verificar conexão com Socket
Leonardo,
Você poderia usar até o netio para isso, mas teria que ter o server rodando em todas as máquinas ou na máquina que você quer testar a conexão:
Pensei neste exemplo do netio que testa a conexão com o servidor, talvez uma adaptação resolva.
Esse ip que você testa é de uma rede interna ou externa (internet)?
Você poderia usar até o netio para isso, mas teria que ter o server rodando em todas as máquinas ou na máquina que você quer testar a conexão:
Pensei neste exemplo do netio que testa a conexão com o servidor, talvez uma adaptação resolva.
Esse ip que você testa é de uma rede interna ou externa (internet)?
Código: Selecionar todos
#define DBSERVER "127.0.0.1"
#define DBPORT 2941
#define DBPASSWD "topsecret"
pSockSrv := netio_mtserver( DBPORT,,, /* RPC */ .T., DBPASSWD )
if empty( pSockSrv )
? "Cannot start NETIO server !!!"
wait "Press any key to exit..."
quit
endif
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Verificar conexão com Socket
Se pesquisar na internet a respeito, verá que a maior parte das respostas converge para o mesmo ponto: não há um modo realmente infalível (e ptrático) de verificar se a conexão com a internet está ou não ativa, para todas as situações possíveis. A forma mais segura, a meu ver, é verificar se existe conexão com algum site cuja disponibilidade esteja perto dos 100% na maior parte do tempo. É o caso do Google, conforme utilizado pelo colega na segunda mensagem desta thread.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Verificar conexão com Socket
Olá asimoes,
Infelizmente não tem como usar NETIO, por que tenho que usar SQLRDD em conjunto, mas assim mesmo agradeço a dica.
Maligno,
Não quero saber se tem internet ou não, quero saber se um determinado DISPOSITIVO(TCP/IP) está conectado ou não no Socket.
Infelizmente não tem como usar NETIO, por que tenho que usar SQLRDD em conjunto, mas assim mesmo agradeço a dica.
Maligno,
Não quero saber se tem internet ou não, quero saber se um determinado DISPOSITIVO(TCP/IP) está conectado ou não no Socket.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Verificar conexão com Socket
Obrigado Pessoal,
Consegui usando o PING do exemplo do Vailton, muito bom por sinal...
filebase.php?d=1&id=149&c_old=0&what=c&page=1
Consegui usando o PING do exemplo do Vailton, muito bom por sinal...
filebase.php?d=1&id=149&c_old=0&what=c&page=1
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Verificar conexão com Socket
Pensei que fosse internet. Minha sugestão seguinte seria exatamente o PING.
Já que deu certo, maravilha.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!

