Tem como criar uma classe que faça a mesma tarefa do comando ping? Se tem, como é? Se já existir alguma classe que já faça isso melhor ainda… valeu.
Ping no java
4 Respostas
Oi
embora acredito que exista outra forma, pode-se fazer da seguinte maneira:
Abra uma conexão Socket na porta X do servidor, se ele aceitar Socket.accept() ele está on, caso contrario esta off.
Para calcular o tempo de resposta … hmm… não sei :-(, teria que enviar um pacote de Y bytes e verifica quanto tempo a resposta demorou pra chegar… não sei bem.
Uma classe que faz exatamante o que o ping faz! Só é um pouco mais complicado para executar, já que em vez de simplesmente
ping 127.0.0.1
precisaremos fazer
java Ping 127.0.0.1
e ainda dependerá do classPath!
Faria sentido alguma cois assim?
olá novamente
,
É, realmente não faz sentido fazer uma ferramenta que já exista, mas, provavelmente ele a utilizará dentro de uma outra classe, acho melhor que ficar usando comando externo.
Olá,
depende exatamente do que se quer. Mas especificamente ping através de sockets acho que não é possível, já que precisaria tratar pacotes icmp, que o java não suporta, acho.
Só por diversão, daria para executar ping com Runtime.exec e capturar o retorno que teria que ser tratado para tirar algo útil!
import java.io.*;
public class Ping
{
private BufferedReader out;
private Process p;
public Ping(String addr) throws IOException
{
p = Runtime.getRuntime().exec("ping " + addr);
out = new BufferedReader(new InputStreamReader(p.getInputStream()));
}
public BufferedReader getBufferedReader()
{
return out;
}
public void waitFor() throws InterruptedException
{
p.waitFor();
}
public static void main(String [] args)
throws IOException, InterruptedException
{
final Ping p = new Ping(args[0]);
new Thread(new Runnable()
{
public void run()
{
try
{
String s = null;
while((s = p.getBufferedReader().readLine()) != null)
{
System.out.println(s);
}
}
catch(IOException io){}
}
}).start();
p.waitFor();
}
}