Pingando em Java  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
chetspop
Entusiasta Java

Membro desde: 03/11/2008 23:04:17
Mensagens: 19
Offline

Pessoal, é o seguinte:

Eu estou precisando fazer um sistema de Ping em um Hostname, da seguinte forma:

É passado o hostname, ele localiza o IP desse hostname, e executa 20 testes de ping... Exibindo todos os dados, da mesma forma que é feito em DOS.
Depois de executar os 20 pings, ele faz uma média do tempo de resposta e exibe o resultado em um textfield...

Caso não localize o hostname, exiba uma mensagem no textfield, informando que não foi encontrado...

Para exemplificar, ao efetuar o ping do "www.uol.com.br", gostaria que ele exibisse o resultado:

Disparando contra www.uol.com.br [200.221.2.45] com 32 bytes de dados:

Resposta de 200.221.2.45: bytes=32 tempo=57ms TTL=251
Resposta de 200.221.2.45: bytes=32 tempo=28ms TTL=251
Resposta de 200.221.2.45: bytes=32 tempo=85ms TTL=251
Resposta de 200.221.2.45: bytes=32 tempo=60ms TTL=251

Estatísticas do Ping para 200.221.2.45:
Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de perda),
Aproximar um número redondo de vezes em milissegundos:
Mínimo = 28ms, Máximo = 85ms, Média = 57ms

Isso parece ser bastante complicado... Dei uma olhada por ai sobre InetAddress, isReachable... mas fiquei bastante confuso sobre como pegar tempo de resposta, etc...

Poderia me dar uma luz??

This message was edited 2 times. Last update was at 13/11/2008 17:53:47

padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

Fala cara...tudo certinho?

Com a InetAdress, eu acredito que vc não vai conseguir pegar a resposta do servidor pq ele só vai vewrificar se o servidor está respondendo ou não.

A utilização é bem simples: InetAddress.getByName(IP_OU_HOST).isReachable(TEMPO_TIMEOUT)

O tempo de timeout é calculado em milisegundos!

Para vc pegar a resposta do servidor, sugiro que vc use as api Scanner e Runtime. Com a Runtime, vc vai trabalhar dessa maneira:

Runtime.getRuntime().exec("cmd /c ping localhost").getInputStream()

E o scanner vai receber esse inputstream que ele vai retornar:



Depois disso, vc cria um loop para ir lendo as linhas do scanner e vai jogando o resultado em um System.out.println(seu_atributo_string + "\n");.

Vai postando ai q eu te ajudo

[]'s
chetspop
Entusiasta Java

Membro desde: 03/11/2008 23:04:17
Mensagens: 19
Offline

Tentei algo bem simplão aqui... Pra exibir o padrão, 4 respostas... Mas com certeza estou esquecendo algo, pois nada é exibido na saída...

chetspop
Entusiasta Java

Membro desde: 03/11/2008 23:04:17
Mensagens: 19
Offline

Arrumei...



Mas a saída está saindo com muito espaço entre um teste e outro... Ex:

Disparando contra www.iwts.com.br [189.14.105.90] com 32 bytes de dados:



Resposta de 189.14.105.90: bytes=32 tempo=28ms TTL=251

Resposta de 189.14.105.90: bytes=32 tempo=25ms TTL=251

Resposta de 189.14.105.90: bytes=32 tempo=27ms TTL=251

Resposta de 189.14.105.90: bytes=32 tempo=24ms TTL=251



Estat¡sticas do Ping para 189.14.105.90:

Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de perda),

Aproximar um n£mero redondo de vezes em milissegundos:

M¡nimo = 24ms, M ximo = 28ms, M?dia = 26ms



Sem falar na acentuação que está incorreta... Alguma ideia?
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

Sobre acentuação não...no prompt, aparece a acentuação?

Do espaço, dá uma procurada nas quebras de linha do Java e de repente vc acha algo q te ajude
chetspop
Entusiasta Java

Membro desde: 03/11/2008 23:04:17
Mensagens: 19
Offline

A acentuação eu corrigi na mão mesmo, substituindo os caracteres...

Agora a quebra de linha tá embaçado... Exemplo:



Dessa forma, ele sai tudo junto sem qubra de linha alguma, sai tudo na mesma linha...

E se eu usar um Println ao invés de somente print, ele sai com aquele monte de quebra de linha, ele não adiciona somente uma...
chetspop
Entusiasta Java

Membro desde: 03/11/2008 23:04:17
Mensagens: 19
Offline

Galera, valeu pela ajuda, já resolvi!

Fiz o mesmo esquema de replace para adicionar as quebras de linha:



Agora minha saída fica:

Disparando contra www.uol.com.br [200.221.2.45] com 32 bytes de dados:

Resposta de 200.221.2.45: bytes=32 tempo=27ms TTL=251
Resposta de 200.221.2.45: bytes=32 tempo=25ms TTL=251
Resposta de 200.221.2.45: bytes=32 tempo=26ms TTL=251
Resposta de 200.221.2.45: bytes=32 tempo=27ms TTL=251

Estatísticas do Ping para 200.221.2.45:
Pacotes Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de perda),

Aproximar um número redondo de vezes em milissegundos:
Mínimo = 25ms, Máximo = 27ms, Média = 26ms

Agora é só usar alguns substring() junto com isDigit() para separar os números de testes efetuados, média, etc...

Muito obrigado pela ajuda novamente!
chetspop
Entusiasta Java

Membro desde: 03/11/2008 23:04:17
Mensagens: 19
Offline

Galera.... Desculpa reviver o tópico... Mas encontrei outra dificuldade... Ainda estou iniciando em JAVA e tenho muitas dúvidas...

No meu comando de ping, eu coloquei o parametro "-t", para ele pingar infinitamente... Porém eu quero que, através de um botão, ele pare o ping...


Pelo DOS, basta pressionar Control-C que ele interrompe o ping e mostra as estatisticas... Mas eu tenho como fazer isso em java?

Ou seja, ao pressionar um botão, ele enviar o comando "Control-C" pra janela do DOS que está pingando?
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team