2011-11-28 33 views
5

Hay 5 dispositivos en mi red con diferentes direcciones IP. Deseo conectarme a estos dispositivos y obtener datos de ellos a través de un socket TCP/IP cuando estén disponibles en mi red. ¿Cómo puedo verificar si están disponibles en Java?¿Cómo puedo verificar si una IP está viva en Java?

public void setUpConnection() { 
    try { 
     Socket client = new Socket(hostIp, hostPort); 
     socketReader = client.getInputStream(); 
     socketWriter = new PrintWriter(client.getOutputStream()); 
    } catch (UnknownHostException e) { 
     System.out.println("Error setting up socket connection: unknown host at " + hostIp); 
     System.out.println("host: " + hostIp + "port: " + hostPort); 
    } catch (IOException e) { 
     System.out.println("Error setting up socket connection: " + e); 
     System.out.println("host: " + hostIp + "port:" + hostPort); 
    } 
} 
+0

Puede abrir un socket conectarse a cada host para determinar si ese puerto está disponible. –

Respuesta

15
InetAddress.getByName(host).isReachable(timeOut); 

Además referencia here

1

si sólo quiere comprobar si el host está arriba, puede utilizar isReachable

1

Por pura de Java existen básicamente dos métodos:

  1. Activo: como su ejemplo, pero haciendo un bucle a través de todos los puertos y todos IP enlazados en el host

  2. Pasivo: ejecutando un pequeño servidor en puertos predefinidos y el otro se registrará cuando estén disponibles.

isReachable puede fallar por muchas razones como se indica en los documentos.

+0

Estos son todos el host y el puerto de mi dispositivo: 1- 192.168.30.190:3001 2- 192.168.30.191:3001 3- 192.168.30.192:3001 4- 192.168.30.193:3001 5- 192.168.30.194:3001 ¿Podría darme un muestra de manera pasiva? – michdraft

+0

Si la configuración de su dispositivo es un conjunto de arreglos, escriba un hilo que intente conectarse con el tiempo de espera para cada uno de ellos como ejemplo. Para todas las demás configuraciones (detección de host/ip/puerto) en mi humilde opinión, necesita un servidor DHCP porque Java puro no llega a las capas de red para hacer esto de una manera limpia. – PeterMmm

0

TCP/IP es un modo de apretón de manos. Para hacer la conexión con cualquiera de estos 5 dispositivos. tanto su cliente como el cliente receptor deben estar vivos. Primero si es posible, utilice zócalo NIO. ¿Puede escribir la lógica del cliente de manera que cada vez que un cliente se conecte, haga una entrada de su IP y puerto en la base de datos y trate de obtener otras direcciones IP y puertos disponibles de la base de datos y trate de crear una conexión con ellos. cada vez que algún dispositivo cliente se vuelve inalcanzable, elimine esa entrada de la base de datos. Ejemplo: cuando el primer dispositivo se conecta, solo se creará un socket porque solo hay una entrada en databae cuando el segundo dispositivo se conecta, hay dos entradas, una es la ip y el puerto de este dispositivo y la segunda entrada pertenece al dispositivo que vino primero.

Gracias Sunil Kumar sahoo

+0

¿Esto es bueno? ¿Puedo retransmitirlo? public boolean hostAvailabilityCheck() { boolean available = true; try { (nuevo Socket (host, puerto)). Close(); } catch (UnknownHostException e) { // host desconocido available = false; } catch (IOException e) { // io excepción, el servicio probablemente no se está ejecutando available = false; } devolución disponible; } – michdraft

+0

sí, hemos manejado de esta manera –

Cuestiones relacionadas