MagicCell Posted April 24, 2009 at 08:51 AM Report #258772 Posted April 24, 2009 at 08:51 AM 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"); } }
magician Posted April 24, 2009 at 09:18 AM Report #258776 Posted April 24, 2009 at 09:18 AM Essa porta 3000 está aberta no servidor ?? ou Tens alguma firewall ligada ? I haven’t lost my mind; it’s backed up on DVD somewhere!
MagicCell Posted April 24, 2009 at 09:40 AM Author Report #258780 Posted April 24, 2009 at 09:40 AM System.out.println("Reach: " + address.isReachable(3000)); Este '3000' não é uma porta, é o timeout. Já desliguei a firewall do vista, mas continua sem funcionar :S
magician Posted April 24, 2009 at 10:26 AM Report #258785 Posted April 24, 2009 at 10:26 AM 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!
MagicCell Posted April 24, 2009 at 10:46 AM Author Report #258789 Posted April 24, 2009 at 10:46 AM Hmm, então vou ter que trabalhar com sockets. Alguma dica ?
magician Posted April 24, 2009 at 10:50 AM Report #258791 Posted April 24, 2009 at 10:50 AM 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!
MagicCell Posted April 24, 2009 at 10:53 AM Author Report #258793 Posted April 24, 2009 at 10:53 AM Pensei que fosse mais difícil ? Obrigado pela ajuda 😉 Fica bem 😄 Quando acabar ou se tiver mais problemas, comunico 😛
matheusczr Posted June 3, 2009 at 03:53 AM Report #269490 Posted June 3, 2009 at 03:53 AM 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); } } }
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now