Jump to content

Recommended Posts

Posted

Olá gente!

Eu estava a tentar fazer um programa para fazer ping ao servidor que o utilizador introduz no textfield de nome 'text'.

Eu tive a pesquisar na net sobre como fazer isso e descobri que apartir do jdk 1.5 existe o método "isReachable()" que é parecido com o ping, mas acho que usa portas específicas para verificar se o servidor está "alcançável". Os métodos 'getHostName()' e 'getHostAddress()' funcionam bem, no entanto devolve-me sempre 'false' no método 'isReachable()' sempre que tento fazer o ping, mesmo para a própria rede.

Se alguém me poder dar uma opinião sobre este código ou de outra maneira para fazer o ping, agradecia.

Obrigado em adiantado!

Aqui vai o código:

    private void pingar() {
       String ip = text.getText().substring(14);

       try {
           InetAddress address = InetAddress.getByName(ip);
           System.out.println("Name: " + address.getHostName());
           System.out.println("Addr: " + address.getHostAddress());
           System.out.println("Reach: " + address.isReachable(3000));
       } catch (UnknownHostException e) {
           System.err.println("Não foi possível encontrar esse servidor");
       } catch (IOException e) {
           System.err.println("Não foi possível pingar o servidor");
       }
   }
Posted

Esse método utiliza a port 7 ou seja a porta do ECHO o mais provavel será estar qq coisa a bloquear o acesso à porta.

Penso que se queres algo que realmente saiba se o servidor está up é ires fazendo ligações porta a porta até encontrar uma aberta. Não é algo muito subtil mas assim garante-te resultados.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Posted

Nada mais simples lol http://java.sun.com/javase/6/docs/api/java/net/Socket.html

Cria o socket, se der exception é pk a porta está fechada XD

Depois podes optimizar como quiseres, ligar apenas a um lista de portas etc... tipo um scan de ports

Tens aqui um exemplo assim em bruto http://www.java.happycodings.com/Java_Networking/code9.html

I haven’t lost my mind; it’s backed up on DVD somewhere!

  • 1 month later...
Posted

Aqui tem um exemplo de uma calculadora utilizando socket, acho q isso vai te ajudar ai.

Cliente

/*
* CalcClient.java
*
* Created on 31 de Março de 2007, 18:37
*/

import java.io.*;
import java.net.*;


public class CalcClient {
        
    public static void main(String args[]){
        
        int num1, num2;
        char oper;
        double resultado;
        
        try{            
            
            //Solicita um socket ao servidor. Deve existir um socket esperando no lado do servidor;
            Socket conexao = new Socket("LocalHost", 5000);            

            //Cria os canais de comunicação com o servidor;
            DataInputStream in = new DataInputStream(conexao.getInputStream());
            DataOutputStream out = new DataOutputStream(conexao.getOutputStream());

            //Cria objeto de leitura do console (teclado);
            BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));            
            
            //Cria interface com console (teclado) e lê dados do console (teclado);
            System.out.println("Sequencia esperada: Num1 (inteiro) + operador (+, -, ., /) + Num2 (inteiro)");
            System.out.print("\nNum1 > " );
            num1 = Integer.parseInt(teclado.readLine());
            System.out.print("Oper > " );
            oper = teclado.readLine().charAt(0);
            System.out.print("Num2 > " );
            num2 = Integer.parseInt(teclado.readLine());            
            
            //Envia dados lidos do console (teclado) para o servidor através do canal de saída (out);
            out.writeInt(num1);
            out.writeChar(oper);
            out.writeInt(num2);
            
            //Recebe do servidor o resultado da operação solicita;
            resultado = in.readDouble();            
            System.out.println("----------");
            System.out.println("resultado > " + resultado);

        }catch(IOException e){            
            System.out.println("IOException: " + e);
            System.exit(1);
        }
        
        
    }
    
}

Servidor

/*
* CalcServer.java
*
* Created on 31 de Março de 2007, 11:07
*/

import java.io.*;
import java.net.*;
import java.util.*;



public class CalcServer extends Thread{
    
    private static ServerSocket ss = null;
    private static Socket conexao = null;    
    
    public CalcServer(Socket _s) {
        this.conexao = _s;
    }
    
    public void run(){        
        
        int num1, num2;
        char oper;
        double resultado;
        
        try{         
            
            //Cria objetos que controlam o fluxo de comunicação;            
            DataInputStream in = new DataInputStream(conexao.getInputStream());
            DataOutputStream out = new DataOutputStream(conexao.getOutputStream());            
            
            //Recebe valores a serem calculados;
            num1 = in.readInt();                                    
            oper = in.readChar();           
            num2 = in.readInt();            
            
            //Calcula o resultado da operação desejada pelo cliente;
            resultado = calculaValor(num1, oper, num2);
            
            //Envia para o cliente o resultado da operação;
            out.writeDouble(resultado);            
            
            //Encerra os canais de comunicação e o socket com o cliente;
            in.close();
            out.close();
            conexao.close();
            
        }catch(IOException e){
            System.out.println("IOException: " + e);            
        }
        
    }
    
    //Recebe os valos recebidos do cliente e retorna o double com o resultado;
    public double calculaValor(int _num1, char _oper, int _num2){        
        
        double _resultado = 0.0;                
        switch(_oper){
            case '+':
                _resultado = _num1 + _num2;
                break;
            case '-':
                _resultado = _num1 - _num2;
                break;
            case '.':
                _resultado = _num1 * _num2;
                break;
            case '/':
                _resultado = _num1 / _num2;
                break;
        }        
        return _resultado;
        
    }
    
    public static void main(String args[]){
        
        try{                        
            //Cria o ServerSockets;
            ss = new ServerSocket(5000);                                            
            while(true){                
                System.out.println("Esperando conexao do cliente...");
                //Cria o Socket e espera por conexões;
                Socket s = ss.accept();                                
                //Cria Thread para socket com um cliente. Passa o socket estabelecido para o método construtor;
                Thread t = new CalcServer(s);
                t.start();                
                //Volta ao loop para esperar mais concexões;
            }                       
            
        }catch(IOException e){
            System.out.println("IOException: " + e);
            System.exit(1);
        }
        
        
    }
    
    
}

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.