Doubt about IP display of the local network

3

I'm developing an application to turn off PCs in a lab. I have a reference to class InetAddress , invoking method getLocalhost() . Then I set this to a% byte of% and then I made a array to display the IP in sequence.

However, since it is a% byte of bytes, if the address is as in my case: 10.248.72.58, it displays as follows: 10.-8.72.58, being byte, the range of numbers that " fit "runs from -128 to 127 (8 bits).

Only if I change to for , the error at the time of calling the function (which returns byte), so array must be byte.

    InetAddress localhost = InetAddress.getLocalHost(); // Pega o nome do host do sistema,
    //resolvendo pra um objeto InetAddress. Faz cache do endereço por um curto periodo de tempo

    byte[] ip = localhost.getAddress();

    for (int i = 0; i < 4; i++) {
        System.out.println("Ip: " + (byte)ip[i]);

    }

Output: Ip: 10.-8.72.58

    
asked by anonymous 17.11.2014 / 13:45

3 answers

5

You can turn the byte from signaling to non-signaled like this:

ip[i] & 0xFFL;

Example:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class IP {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress localhost = InetAddress.getLocalHost(); 
        byte[] ip = localhost.getAddress();
        int[] ip2 = new int[ip.length];
        System.out.println("Imprimindo em byte:");
        for (int i = 0; i < 4; i++) {
            System.out.printf("Ip: %d ", ip[i] & 0xFFL); //imprime não-sinalizado
            ip2[i] = (int) (ip[i] & 0xFFL); //armazenei já como não-sinalizado em um int[]
        }
        System.out.println("\nImprimindo em int:");
        for (int i = 0; i < 4; i++) {
            System.out.printf("Ip: %d ", ip2[i]); //imprime o int não-sinalizado
        }
    }
}

Result:

  

Byte printing:
  Ip: 192 Ip: 168 Ip: 239 Ip: 1
  Printing in int:
  Ip: 192 Ip: 168 Ip: 239 Ip: 1

    
17.11.2014 / 14:08
4

If it is just to show the IP you can simply use the getHostAddress() method.

InetAddress localhost = InetAddress.getLocalHost(); // Pega o nome do host do sistema,     resolvendo pra um 
// objeto InetAddress. Faz cache do endereço por um curto periodo de tempo

System.out.println("Ip: " + localhost.getHostAddress());
    
17.11.2014 / 13:59
-1
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;

/**
 * Contém métodos úteis para o sistema
 *
 * @author [email protected] Brasília, 24/08/2017
 */
public class Utils {

    /**
     * Dado um String IP devolve um InetAddress.
     */
    public static InetAddress getInetAddress(String ip) {
        System.out.println("ip = " + ip);

        String[] pedaçoIP = ip.split("[.]");
        if (pedaçoIP.length != 4){
           mostraErro("Utils:getInetAddress():ip mau formado =\"" + ip + "\"" );
        }
        byte[] array = new byte[4];
        for (int i = 0; i < 4; i++) {
            int x = Integer.decode(pedaçoIP[i]);
            array[i] = (byte) x;
            /*
            Acima funciona muito bem, mas se tentar assim, é incompatível!
            array[i] = (byte) Integer.decode(pedaçoIP[i]);
            Mas assim também funciona
            array[i] = (byte) ((int)Integer.decode(pedaçoIP[i]));
            */

        }
        InetAddress address = null;
        try {
            address = InetAddress.getByAddress(array);

        } catch (UnknownHostException ex) {
            mostraErro("Utils:getInetAddress():ip=" + ip + "\nex.getMessage="
                    + ex.getMessage());
        }
        return address;
    }

    /**
     * Mostra uma janela com mensagem de erro.
     */
    public static void mostraErro(String mensagem) {
        System.out.println("ERRO: " + mensagem);
        String[] opções = {"OK, Continuar", "Fechar o Programa"};
        int retorno = JOptionPane.showOptionDialog(null, mensagem,
                "OCORREU UM ERRO", 0, JOptionPane.ERROR_MESSAGE, null, opções, 1);

        if (retorno == 1) {
            System.exit(-1);
        }
    }

    /**
     * Testa os métodos fora do seu contexto.
     */
    public static void main(String[] args) {
        InetAddress address = null;
        address = getInetAddress("127.0.0.1");
        System.out.println("HostAddress = \""+address.getHostAddress()+"\"");
        System.out.println("HostName = \""+address.getCanonicalHostName()+"\"");
        address = getInetAddress("192.168.1.1");
        System.out.println("HostAddress = \""+address.getHostAddress()+"\"");
        System.out.println("HostName = \""+address.getCanonicalHostName()+"\"");
        //mostraErro("Uma mensagem de erro");
    }
}
    
26.08.2017 / 01:52