olá pessoal, estou com um problema aqui e precisa conectar o servidor que trabalho em várias cameras em diferentes localidades, mas antes preciso verificar se todas estão on.
atualmente elas compartilham o ip com outros serviços, então tenho que “pingar” apenas a porta a da câmera.
estou usando esse exemplo aqui por enquanto, mas para ips inválidos ele tem se mostrado muito lento.
// Create a socket with a timeout
try{InetAddressaddr=InetAddress.getByName("java.sun.com");intport=80;SocketAddresssockaddr=newInetSocketAddress(addr,port);// Create an unbound socketSocketsock=newSocket();// This method will block no more than timeoutMs.// If the timeout occurs, SocketTimeoutException is thrown.inttimeoutMs=2000;// 2 secondssock.connect(sockaddr,timeoutMs);}catch(UnknownHostExceptione){}catch(SocketTimeoutExceptione){}catch(IOExceptione){}
o método isReachable da classe InetAddress parece uma solução ideal, mas não posso setar portas neles.
Cara, seguinte, esse metodo não exatamente um PING que utiliza o protocolo ICMP, que é o mesmo do comando PING no prompt do windows.
Uma saida que é certo que funciona, é utilizar JNI, andei pesquisando ha um tempo atras, e encontrei soluções desse tipo, e funcionais…
Espero ter ajudado um pouco…
Abracos!
Z
zaratinePJ
vc tem algum exemplo pra facilitar? eu so meio que iniciante só que to precisando disso com urgência, de qualquer forma já to pesquisando por aqui.
Obrigado.
F
felipeloPJ
//**************************************// // Name: Ping in JAVA// Description:Actually, we can't code P// ING implementation in JAVA. But, we can // use PING command based on our system, an// d then catch and parse the output.// By: yan friskan////This code is copyrighted and has// limited warranties.Please see http://// www.Planet-Source-Code.com/vb/scripts/Sh// owCode.asp?txtCodeId=4559&lngWId=2//for details.//**************************************// // actually this code come from// http://forum.java.sun.com/thread.jsp?// forum=49&thread=190073&tstart=0&trange=1// 5// I'm just modified it a little. I thin// k this is may be usefull for beginners l// ike you and me :)classtryMe{publicstaticvoidmain(String[]args){StringhostIP="10.112.1.113";java.lang.Runtimer=java.lang.Runtime.getRuntime();try{java.lang.Processp=r.exec("ping "+hostIP);java.io.BufferedReaderbr=newjava.io.BufferedReader(newjava.io.InputStreamReader(p.getInputStream()));Stringl="";try{while((l=br.readLine())!=null){if(l.startsWith("Reply from"))System.out.println("LIFE -->"+l);if(l.startsWith("Request timed out"))System.out.println("DIES -->"+l);}}catch(java.io.IOExceptionioe){ioe.printStackTrace();}}catch(java.io.IOExceptionioe){ioe.printStackTrace();}}}
Esse codigo esta pronto… o que ele faz é simplesmente executar o PING do windows e ler o que ele retorna. :razz:
Mas como o mundo nem sempre é azul, tu fica com o problema da portabilidade, mas isso tu pode controlar, sabendo qual Sistema Operacional tu ta rodando, e executar o “PING” desse SO.
Era isso cara?
H
HericksnakePJ
Amigo, nem sei se vem ao caso, mas outra coisa que vc pode fazer, é ir no promp e executar o comando:
se for windows:
tracertendereçoHost
se for Linux
tracerouteendereçoHost
Ele vai traçar a rota até o ponto que vc deseja. Dá pra vc ver, se é o seu programa que está lento ou se está tendo problema na transmissão (na rede), como um roteador sobrecarregado, demora de resposta, etc…