Ping no java

4 respostas
E

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.

4 Respostas

H

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.

S

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?

H

olá novamente :wink: ,
É, 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.

S

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();
    }
}
Criado 9 de abril de 2005
Ultima resposta 11 de abr. de 2005
Respostas 4
Participantes 3