2011-11-28 11 views
5

Ci sono 5 dispositivi nella mia rete con diversi indirizzi IP. Desidero collegarmi a questi dispositivi e ottenere dati da loro tramite il socket TCP/IP quando sono disponibili nella mia rete. Come posso verificare se sono disponibili in java?Come posso verificare se un IP è attivo in 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

È possibile aprire un socket connettersi a ciascun host per determinare se quella porta è disponibile. –

risposta

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

Ulteriori riferimento here

1

se si desidera solo per verificare se l'host è in su, è possibile utilizzare isReachable

1

Per puro Java ci sono fondamentalmente due metodi:

  1. Attivo: come il tuo esempio, ma in looping attraverso tutte le porte e tutti gli IP associati sull'host

  2. Passivo: esegue un server di piccole dimensioni su una o più porte predefinite e l'altro si registrerà quando sarà disponibile.

isReachable potrebbe non riuscire per molti motivi come indicato nei documenti.

+0

Questi sono tutti host e porta del mio 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 Potresti per favore dare un esempio di modo passivo? – michdraft

+0

Se la configurazione dei dispositivi è una serie di correzioni, quindi scrivere alcuni thread che tenta di connettersi con timeout a ciascuno di essi come esempio. Per tutte le altre configurazioni (host/ip/port detection) IMHO è necessario un server DHCP perché Java puro non raggiunge i livelli di rete per farlo in modo pulito. – PeterMmm

0

TCP/IP è una modalità di handshaking. Per stabilire una connessione con uno qualsiasi di questi 5 dispositivi. sia il tuo cliente che il client destinatario dovrebbero essere vivi. Prima, se possibile, utilizzare Socket NIO. puoi scrivere la logica del client in modo tale che ogni volta che uno qualsiasi dei client arriva online, inserisci una voce del suo ip e port nel database e prova ad ottenere altri IP e porte disponibili dal database e prova a creare una connessione con loro. ogni volta che un dispositivo client diventa irraggiungibile cancella quella voce dal database. Esempio: quando il primo dispositivo è in linea, allora verrà creato un solo socket perché c'è una sola voce in databae quando il secondo dispositivo arriva online ci sono due voci una è l'ip e la porta di questo dispositivo e la seconda voce appartiene al dispositivo che è venuto prima.

Grazie Sunil Kumar Sahoo

+0

È buono? Posso trasmettere su di esso? host booleano pubblicoAvailabilityCheck() { booleano disponibile = true; prova { (nuovo socket (host, porta)). Close(); } catch (UnknownHostException e) { // host sconosciuto available = false; } catch (IOException e) { // io eccezione, servizio probabilmente non in esecuzione available = false; } reso disponibile; } – michdraft

+0

sì, abbiamo gestito come questo –

Problemi correlati