Convirtiendo String en Direccion IP

Antares
16 de Enero del 2006
Estoy trabajando en un sistema que trabaja en red, y al iniciar el programa necesito pasar como argumento una direccion ip, hasta aqui todo bien, pero necesito convertir dicha ip a un objeto InetAddress o a un objeto SocketAddress para poder dicha direccion en un paquete UDP, es aqui cuando ocurren los problemas Sad :

1. Como voy a usar el metodo getByAddress() de la clase InetAddress, necesito, y como ya intente otras cosas mas tontas que no funcionaron, creo un arreglo de bytes, del modo siguiente:

Código:
byte ip[] = new byte[4];
ip[0]=Byte.parseByte("127");
ip[1]=Byte.parseByte("0");
ip[2]=Byte.parseByte("0");
ip[3]=Byte.parseByte("1");


2. Entonces creo el paquete:

Código:
dp = new DatagramPacket(cad.getBytes(), cad.length(),
InetAddress.getByAddress(ip),//convIP(".","127.0.0.1")),
7540);


3. Y luego trato de enviarlo:

Código:
ds.send(dp);


4. Y es aquí donde el JRE me manda el siguiente mensaje de error:

java.net.BindException: Cannot assign requested address: Datagram send failed
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:611)

y despues dice cosas sobre mis clases y sobre las apis graficas que estoy usando, asi que eso no se los pongo.

¿Alguna idea de como convertir una String que representa una ip a un objeto el cual pueda usar para mandar el paquete?

Demo comentarles tambien que ya he estado revisando la documento de Sun de Java, y no existe un constructor o metodo que pueda usar para arreglar la situacion. Tambien hacerles el comentario que tengo poco que inicie con esto de java (3 Meses) asi que, por favor algo de comprension. Very Happy

Espero sus respuestas, gracias de antemano.

Diego
16 de Enero del 2006
En la clase java.net.InetAdress:
public static InetAddress getByAddress(String host,
byte[] addr)
throws UnknownHostExceptionCreate an InetAddress based on the provided host name and IP address No name service is checked for the validity of the address.
The host name can either be a machine name, such as "java.sun.com", or a textual representation of its IP address.

Traduciendo: el nombre de host puede ser ... una representación textual de su dirección IP. Después llamas al método public byte[] getAddress() y obtienes lo que quieres. De todas formas, creo que Java representa el intervalo 0-255 como -128-127 para ahorrar espacio, por lo que un método para obtener eso sería:
public static byte[] obtenerIP(String direccionIp){
String [] numeros=direccionIp.split(".");
byte [] ip=new byte [numeros.length];
for(int i=0;i<ip.length;i++)
ip[i]=Byte.parseByte(numeros[i])-128;
return ip;
}