Para obtener la dirección IP de una maquina lo primero que debemos de hacer es construir una clase InetAddress a partir de una URL. Esta clase la encontraremos en el paquete java.net. Ejemplos de URL serían www.lineadecodigo.com, www.google.com, www.w3api.com,…
Para instanciar la clase utilizaremos la función getByName(sURL) a la cual pasaremos como parámetro una cadena de caracteres que contenga la URL de la cual queremos conocer su dirección IP.
Una vez construida la clase InetAddress invocaremos el método getAddress el cual nos devolverá un array de bytes de cuatro posiciones. Cada una de las posiciones contiene en codificación binaria el número correspondiente a la mascara de la IP A.B.C.D. Como sabemos dichos números pueden estar en el rango 0..255
Ahora viene el paso «más lioso». Java no entiende de números sin signo a si que en un byte están codificados los números 0 a 128 como enteros y 129 a 255 como negativos equivaliendo, estos, a -1 a -127. En resumidas cuentas que el -1 equivale al 255 y el -127 al 129. De tal manera que tenemos todo el rango de números del 0 al 255.
Una primera solución a nuestro problema es usar el operador condicional()?:. Si el numero es positivo lo dejamos tal cual, si es un número negativo le sumamos 256, para obtener el número real. De esta manera, la solución nos quedaría algo así.
Para el primer numero.
int numero;
numero = (arrayBytes[0]<0)?arrayBytes[0]+256:arrayBytes[0];
Una buena solución. Ahora tenemos en cuenta de que lo vamos a dejar en una cadena de caracteres. Usemos el toString.....
String numero;
numero = (arrayBytes[0]<0)?Integer.toString(arrayBytes[0]+256):Integer.toString(arrayBytes[0]);
Todo esto en un bucle para recorrer los 4 números.
String numero;
for (int x=0; x < arrayBytes.length; x++) {
numero += (arrayBytes[x]<0)?Integer.toString(arrayBytes[x]+256):Integer.toString(arrayBytes[x]);
}
Se nos olvidaban los puntos de la dirección... Antepondremos un punto a todos los números menos al primero, es decir, al 0.
String numero;
for (int x=0; x < arrayBytes.length; x++) {
if (x > 0) {
numero += ".";
}
numero += (arrayBytes[x]<0)?Integer.toString(arrayBytes[x]+256):Integer.toString(arrayBytes[x]);
}
Pues parece que ya esta todo....... Pero veamos una última cosa. Especialmente dedicada a los amantes de los bytes o a aquellas personas donde la ejecución de un programa varía .0010 sg a .0200 sg ........ puro manejo de bits.
Si queremos que a una ristra de bits con signo le desaparezca el bit del signo (el primero de todos). Le aplicamos el operador & con un número igual de bits ( en este caso 8 ) de tal manera que el operador desaparece a la izquierda.
El bucle quedaría de la siguiente forma.....
String numero;
for (int x=0; x < arrayBytes.length; x++) {
if (x > 0) {
numero += ".";
}
numero += arrayBytes[x] & 255;
}