Ping em server ( + pesquisei , + Não entendo Sockets)

Boa tarde gente, achei esse tópico : http://www.guj.com.br/java/68869-ping-em-java-

porém ainda estou com duvidas de como pingar um site, por exemplo o www.google.com.br

e também, preciso saber pingar um servidor com uma porta

Podem me ajudar? Achei esse código abaixo mas ainda nao consegui pingar

[code]
package Aservice;

import java.net.InetAddress;
import javax.swing.JOptionPane;

/**
*

  • @author André
    */
    public class AService {

    public static void main(String[] args) {
    String a = JOptionPane.showInputDialog(“Host:”);
    CheckIfOn(a);
    }

    public static void CheckIfOn(String host)
    {
    try {
    if (InetAddress.getByName(host).isReachable(5000))
    System.out.println("Ping OK: " + host);

    else
    System.out.println("Ping Fail: " + host);
    }
    catch (Exception e) {
    System.err.println("Ping Fail: " + host + " - " + e);
    }
    }
    [/code]

Vamos por parte: quando se “pinga” um computador, não é para passar a porta. Passe somente ou o endereço IP ou o nome da máquina.
O ping serve para verificar se a máquina está “on line”. Pode haver casos em que um servidor não responda ao ping, mesmo estando “on line”. Isto pode ser configuração do servidor.
Ping usa porotocolo ICMP.

[quote=oyama]Vamos por parte: quando se “pinga” um computador, não é para passar a porta. Passe somente ou o endereço IP ou o nome da máquina.
O ping serve para verificar se a máquina está “on line”. Pode haver casos em que um servidor não responda ao ping, mesmo estando “on line”. Isto pode ser configuração do servidor.
Ping usa porotocolo ICMP.[/quote]
Complementando, para testar a porta, usualmente se utiliza o telnet, cuja sintaxe seria

telnet 10.1.1.1 //tentativa de conexão telnet padrão, na porta 23
telnet 10.1.1.1 9001 //tentativa de conexão telnet informando a porta 9001

a um bom tempo (uns 3 anos) eu cheguei a precisar disso e tinha esse método isReachable mas ele só respondia a localhost e dava timeout a qualquer outra(sendo que eu conseguia pingar diretamente no prompt), pesquisando encontrei que este método estava com bugs relatados…

Não sei como está hoje, se ja resolveram (na época usei java 6, acho que dos primeiros updates), mas se for o caso chame o runtime e execute pelo runtime mesmo…

Gente , estou tentando com o runtime agora… Eu ja tenho uma noção como fazer ele executar o ping + o host , só que eu não sei como pegar a resposta do cmd e jogar na tela…

Como Faço isso ?

Por favor me ajudem!

Aguardo Resposta

[quote=Andre Lopes]Gente , estou tentando com o runtime agora… Eu ja tenho uma noção como fazer ele executar o ping + o host , só que eu não sei como pegar a resposta do cmd e jogar na tela…

Como Faço isso ?

Por favor me ajudem!

Aguardo Resposta

[quote]

package helloonlineservice;

import java.io.IOException;
import java.net.InetAddress;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import sun.net.TelnetInputStream;

/**
*

  • @author André
    */
    public class HelloOnlineService {

    public static void main(String[] args) {
    String a = null;
    //a = JOptionPane.showInputDialog("Host: ");

     UseRunTime(a); 
    

    }

    public static void UseRunTime(String a)
    {
    Runtime rt = Runtime.getRuntime();

     try {
       //Process proc = rt.exec("ping" + a);
         Process proc = rt.exec("msconfig");
         
         rt.exit(0);
         
         int exitVal = proc.exitValue();
         
         System.out.println("Result:" + exitVal);
         
     } catch (IOException ex) {
         
         System.out.println("Exception: " + ex.getMessage());
     }
    

    }
    }

[/quote][/quote]

http://www.vivaolinux.com.br/topico/Java/Runtime.getRuntime().exec()

A página que você procura não foi encontrada.

ok, achei o site… mas eu tenho dificuldade com inputstream e outputstream

Pode me ajudar nisso ? tipo, pq eu só preciso pegar a resposta e juntar tudo numa string pra poder analisar

Tenta algo parecido com isso:

InputStream input = process.getInputStream(); int c; while((c = input.read()) != -1) { System.out.print((char)c); }

Nossa cara, valeu, deu certo!
Perguntei pro meu professor como que este readbyte funcionava, e agora ja entendi;

Só preciso saber mais uma coisa… Em vez de transformar em char, eu preciso transformar pra string!

Tentei trocar char pra string mas nao deu certo… Como posso fazer isso?

Agradeçooooooooooooo

[quote=Andre Lopes]Nossa cara, valeu, deu certo!
Perguntei pro meu professor como que este readbyte funcionava, e agora ja entendi;

Só preciso saber mais uma coisa… Em vez de transformar em char, eu preciso transformar pra string!

Tentei trocar char pra string mas nao deu certo… Como posso fazer isso?

Agradeçooooooooooooo[/quote]

Você pode usar a classe StringBuilder para concatenar:

[code]InputStream input = process.getInputStream();
int c;
StringBuilder sb = new StringBuilder("");
while((c = input.read()) != -1)
{
sb.append((char)c);
}

String outProcess = sb.toString();
System.out.println(outProcess);[/code]

A classe StringBuilder permite alterar a sequência de caracteres armazenada por ela. A classe String não permite. Por isso que eu usei StringBuilder para concatenar os caracteres.

Valeu… Então O código ficou assim, mas agora nao aparece nada na tela…O que estou fazendo de errado ?

[code]package helloonlineservice;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import sun.net.TelnetInputStream;

/**
*

  • @author André
    */
    public class HelloOnlineService {

    public static void main(String[] args) {
    String a = null;
    //a = JOptionPane.showInputDialog("Host: ");

     UseRunTime(a); 
    

    }

    public static void UseRunTime(String a)
    {
    Runtime rt = Runtime.getRuntime();

     try {
       //Process proc = rt.exec("ping" + a);
         Process proc = rt.exec("cmd");
         
         
         InputStream inputStream = proc.getInputStream();
         OutputStream outputStream = proc.getOutputStream();
        
        InputStream input = proc.getInputStream();  
        
         int c;  
         StringBuilder sb = new StringBuilder("");  
         
             while((c = input.read()) != -1)  
             {  
              sb.append((char)c);  
             }  
    
         String outProcess = sb.toString();  
         System.out.println(outProcess);  
    
         
         rt.exit(0);
         int exitVal = proc.exitValue();
         
         System.out.println("IS:" + inputStream); 
         System.out.println("Result:" + exitVal);
         System.out.println("OS:" + outputStream); 
        
     } catch (IOException ex) {
         
         System.out.println("Exception: " + ex.getMessage());
     }
    

    }
    }

[/code]

Cara, esse teu processo não tá executando nada. Você apenas está chamando o terminal DOS e não está passando nenhum comando pra ele. Por isso que não deu nenhum resultado.
Eu mudei uma linha do seu código. O parâmetro /C é para chamar o terminal sem abrí-lo, apenas executando o comando.

[code]package helloonlineservice;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import sun.net.TelnetInputStream;

/**
*

  • @author André
    */
    public class HelloOnlineService {

    public static void main(String[] args) {
    String a = null;
    //a = JOptionPane.showInputDialog("Host: ");

     UseRunTime(a); 
    

    }

    public static void UseRunTime(String a)
    {
    Runtime rt = Runtime.getRuntime();

     try {
       //Process proc = rt.exec("ping" + a);
         Process proc = rt.exec("cmd.exe /C dir");// Teste assim:
         
         
         InputStream inputStream = proc.getInputStream();
         OutputStream outputStream = proc.getOutputStream();
        
        InputStream input = proc.getInputStream();  
        
         int c;  
         StringBuilder sb = new StringBuilder("");  
         
             while((c = input.read()) != -1)  
             {  
              sb.append((char)c);  
             }  
    
         String outProcess = sb.toString();  
         System.out.println(outProcess);  
    
         
         rt.exit(0);
         int exitVal = proc.exitValue();
         
         System.out.println("IS:" + inputStream); 
         System.out.println("Result:" + exitVal);
         System.out.println("OS:" + outputStream); 
        
     } catch (IOException ex) {
         
         System.out.println("Exception: " + ex.getMessage());
     }
    

    }
    }

[/code]