meilleure Alternative pour InetAddress.getByName(hôte).isReachable(timeout)
Je suis en train d'essayer de parvenir à un hôte et ont le code suivant
if(!InetAddress.getByName(host).isReachable(TIMEOUT)){
throw new Exception("Host does not exist::"+ hostname);
}
Le nom d'hôte que je suis capable de ping à partir de windows, et a également fait un tracert sur elle, et elle retourne tous les paquets. Mais java jette à l'exception de "l'Hôte n'existe pas::";
La valeur de Délai d'expiration j'ai expérimenté de donner 2000ms, à 5000ms. J'ai essayé de 3000. Quelle est la cause de ce problème je ne suis pas en mesure de comprendre. J'ai fait des recherches sur le net et certains disent que InetAddress.getByName(hôte).isReachable(temps) n'est pas fiable et se comporte selon le système interne.
Quelle est la meilleure alternative pour cette si cela est vrai. S'il vous plaît suggérer.
OriginalL'auteur | 2013-08-19
Vous devez vous connecter pour publier un commentaire.
Ouvrir un Socket TCP sur un port que vous pensez est ouvert (22 pour Linux, 139 pour Windows, etc.)
Ou d'utiliser certains hack pour envoyez un ping. (inspiré de ici: http://www.inprose.com/en/content/icmp-ping-in-java)
Même hack pour Android peut être trouvé ici:
ping -n 1
sur Windows, c'est que la "Destination host unreachable." résultat renvoie un code de sortie 0, la création d'un grand nombre de faux positifs.comment puis-je l'utiliser avec android?
Ping avec android: stackoverflow.com/questions/3905358/...
InetSocketAddress
constructeur utilise en interneInetAddress.getByName
en interne qui a un long délai d'attente. Donc, la première solution n'est pas vraiment une solution. C'est la même chose.C'est juste que pour l'hôte par son nom. Il n'y aura pas d'opération de blocage pour une adresse IP. "ping" sera probablement experince le même problème, car il doit aussi résoudre un nom d'hôte.
OriginalL'auteur Shloim
J'ai trouvé que
ping -n 1 hostname
n'est pas fiable non plus. Si vous obtenezReply from X.X.X.X: Destination host unreachable.
la commande, de fait, donne un code de sortie de 0, ce qui vous donne beaucoup de faux positifs.La solution est à la recherche de la chaîne "TTL" dans le résultat, car il n'existe que lorsque vous obtenez un ping réussie. Parce que la commande a un tuyau, vous devez également utiliser
cmd /C
.Voici un exemple (Windows):
Je ne suis pas sûr de l'unix équivalent, et n'ont pas une machine unix pour tester.
OriginalL'auteur Huon Imberger
Pour les développeurs Android: la méthode ci-dessus ne fonctionne pas si
inet
n'est pas disponible (plus précisément lors de cache DNS fonctionne dans un délai d'expiration); ce que j'ai trouvé: DSN recherche toujours prend environ 1 minute.Mon code est comme suit:
Il est prévu que
connect
lève une exception délai dans un délai de 5 secondes, mais le temps était de 65 secondes lorsqueinet
était inaccessible (quelqu'un qu'il décrit comme fauxinet
connexion: Connectivité dit connecté, maisinet
est inaccessible).OriginalL'auteur Zero