Sto cercando di scoprire se determinati host sulla mia rete sono raggiungibili. Il mio codice Java è la seguente:Java InetAddress.isReachable() timeout
InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}
Questo funziona abbastanza bene, se abbasso il timeout di dire 500ms, invece, non designa più l'host raggiungibile. Ho in programma di controllare parecchi host in un ciclo, quindi avere un timeout basso è abbastanza importante. Se eseguo il ping dell'host manualmente dalla riga di comando di Windows, sono necessari meno di 10 ms.
Quindi perché il metodo Java ha bisogno di un timeout molto più elevato per avere successo? Esistono alternative all'utilizzo di isReachable()
?
Grazie, in sostanza sì, vorrei connettermi a/controllare gli host sulla porta 10001 che viene utilizzata dai dispositivi che devo trovare. Potresti dare un esempio su come implementare il controllo della porta conosciuta? – Jerome
Beh, non mi occupo di implementare un metodo I/O non bloccante (NIO). Ma direi solo creare uno zoccolo. Creare un SocketAddress con l'IP di destinazione e la porta 10001. Quindi chiamare socket.connect (SocketAddress, timeout) con il timeout appropriato. Catch TimeOutException. Se il socket.connect() ritorna senza eccezioni, chiudi il socket, sai che il dispositivo è in ascolto su 10001. Per un modello NIO, dai un'occhiata al progetto ed esempi Netty open-source. – brettw