¿como buscar ip (no fija) y nombreHost de equipos en LAN?

Hola a todos.
Miren tengo una aplicacion de escritorio desarrollada en Java + mySQl que genera facturas y recibos, voy por la version 1.10 iniciando desde la 0.8. Pero ahora necesito distribuirla para funcionar como cliente/servidor.

Ya cuenta con instalador basado en IssTool, el cual se encarga de levantar Mysql e instalar la aplicacion. Trataré de ser lo más claro posible.

Aclaraciones:
1.-No tengo ningun problema al conectarme desde otra maquina a mi servidor Mysql
2.-No tengo ningun problema con instalar mi aplicacion y levantar Mysql en la maquina servidor.
3.-Ya tengo lista la misma aplicacion pero modificada para instalarla en una terminal cliente.
4.-Tengo la idea de mostar todos los equipos en una tabla para poder elegir.

La idea principal para las terminales cliente, es que el cliente instale la aplicacion en cada una de sus terminales y busque (Manual o automaticamente) el nombre del servidor ó la IP, y así la aplicacion se pueda comunicar con la base de datos.

Dudas:
1.-Como busco a todos los equipos en la red?

Les agradeceria si me orientaran como buscar solo una vez todos los nombres e ip's de los equipos conectados a la red.
La razon de esto es que no puedo colocar direcciones ips fijas en cada cliente que necesite la aplicacion.

Saludos y gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Gallosuarez

Posible solución ...

A mi parecer, creo que la mejor solución es poner una archivo de propiedades en tu aplicación cliente donde se especifique la url de la base de datos (se haría en forma manual). Esto debido a que si en un momento dado (caso común) la red LAN se encuentra detrás de un "Firewall" este podría rechazar las peticiones de "ping" (protocolo ICMP) hacia los demás equipos.
Sin embargo, existe este código para que puedas hacer lo que preguntas (a sabiendas que no sirve si existe un caso como el mencionado arriba).

public void checkHosts(String subnet){
   int timeout=1000;
   for (int i=1;i<254;i++){
       String host=subnet + "." + i;
       if (InetAddress.getByName(host).isReachable(timeout)){
           System.out.println(host + " is reachable");
       }
   }
}

Se usaría de la siguente forma :  checkHosts("192.168.0");

Saludos y espero que te sirva de algo ..
Gerardo Suárez Trejo

P.D. Te comento que solo funciona si tienes >JDK1.5

Imagen de Livio

sobre InetAdrees

Hola gracias por la respuesta, estoy probando tu codigo, y logré meter en un jTable todos los nombres de equipos de la red asi como su IP, así puedo selecionar el nombre del host y la direccion IP para poder dirigir la aplicacion al servidor Mysql.

Peroooo!!! la probe en un web, con 4 equipos con w7 y firewall Comodo (que conozco muy bien), pero InetAdrees solo me detecta los equipos si el firewall esta desactivado. Aunque permita la conexion a mi aplicacion, si el firewall está activado no me los detecta.

En otro caso la probe en una red casera sin firewall 3 eqiupos y una tablet, pues me detecto a todos.