Java'da kendi InetAddress.isReachable(String address, int port, int timeout) yönteminizi nasıl uygulayabilirsiniz?
Yayınlanan: 2020-10-06
Java'da ping ve port kontrolünü kontrol etmenin birden çok yolu vardır. Sistem varsayılanının ping komutunu, Java'nın yerel yöntemi InetAddress
yardımcı programını, HttpURLConnection
ve daha fazlasını kullanabilirsiniz.
Üretimde veya test ortamınızda, aynı anda yüzlerce kontrol diyelim, birden fazla port kontrolü yapmak istiyorsanız, bazen InetAddress.isReachable()
yöntemi doğru yanıt almıyor.
Benim durumumda bulaş, www.google.com'a bağlanmaya çalışırken %100 başarısızlık fark ettim. Aşağıdaki sorulardan herhangi biri var mı?
- java – IP adresine ping atabildiğimde InetAddress.isReachable neden false döndürüyor?
- İnternet bağlantım olup olmadığını nasıl kontrol edebilirim?
- Java.net.InetAddress.isReachable() için Java Kodu Örnekleri
- java ip adresinin erişilebilir olup olmadığını kontrol edin
- Uzak bir sistemin erişilebilir olup olmadığı nasıl test edilir?
HttpURLConnection.openConnection() kullanarak ping kontrolü yapmak istiyorsanız bu öğreticiyi izleyin.
Bu eğitimde, Ping kontrolünü gerçekleştirmenin 2 farklı yolunu inceleyeceğiz:
- InetAddress.isReachable(zaman aşımı) yöntemi
- Crunchify'ın zamanın %
crunchifyAddressReachable(host, port, timeout)
yöntemi
Başlayalım:
- CrunchifyInetAddressIsReachable.java sınıfını oluşturun.
- Yukarıdaki 2 farklı testi gerçekleştireceğimiz pingCheckbyInetAddressisReachable() ve pingCheckbyCrunchifyisReachable() olmak üzere 2 metot oluşturacağız.
crunchifyAddressReachable() yöntemini hangi yöntemi kullanıyoruz?
Uygulamamızda java.net.Socket
kullanıyoruz. Socket sınıfı, istemci soketlerini uygular. connect()
yardımcı programı yardımıyla %100 doğru sonuç elde ediyoruz. Lütfen daha fazla ayrıntı için aşağıdaki koda bir göz atın.
CrunchifyInetAddressIsReachable.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
package crunchify . com . tutorial ; import java . io . IOException ; import java . net . InetAddress ; import java . net . InetSocketAddress ; import java . net . Socket ; /** * @author Crunchify.com * Problem: Sometimes InetAddress.isReachable() gives false result. * We have implemented the same Reachable check using Socket. It works almost 100% of the time. * Comparison added. * Version: 1.1 * */ public class CrunchifyInetAddressIsReachable { static String host = "www.google.com" ; public static void main ( String [ ] args ) { // check ping using default Java Utility pingCheckbyInetAddressisReachable ( ) ; // check ping using modified Crunchify Utility pingCheckbyCrunchifyisReachable ( ) ; } private static void pingCheckbyInetAddressisReachable ( ) { try { InetAddress crunchifyAddr = InetAddress . getByName ( host ) ; boolean reachable = crunchifyAddr . isReachable ( 2000 ) ; if ( reachable ) { System . out . println ( "InetAddress.isReachable(timeout) Result ==> Ping successful for host: " + host ) ; } else { System . out . println ( "InetAddress.isReachable(timeout) Result ==> Ping failed for host: " + host ) ; } } catch ( Exception e ) { e . printStackTrace ( ) ; } } private static void pingCheckbyCrunchifyisReachable ( ) { try { crunchifyAddressReachable ( host , 80 , 2000 ) ; System . out . println ( "\nOverloaded isReachable(host, port, timeout) Result ==> Ping successful for host: " + host ) ; } catch ( Exception e ) { System . out . println ( "\nOverloaded isReachable(host, port, timeout) Result ==> Ping failed for host: " + host ) ; } } /* * Overriding default InetAddress.isReachable() method to add 2 more arguments port and timeout value * * Address: www.google.com * port: 80 or 443 * timeout: 2000 (in milliseconds) */ private static boolean crunchifyAddressReachable ( String address , int port , int timeout ) throws IOException { Socket crunchifySocket = new Socket ( ) ; try { // Connects this socket to the server with a specified timeout value. crunchifySocket . connect ( new InetSocketAddress ( address , port ) , timeout ) ; // Return true if connection successful return true ; } catch ( IOException exception ) { exception . printStackTrace ( ) ; // Return false if connection fails return false ; } finally { crunchifySocket . close ( ) ; } } } |
Kodu Eclipse ortamına kopyaladığınızda, aşağıdaki sonucu görmek için Java Uygulaması olarak çalıştırmanız yeterlidir.

Konsol Çıkışı:
1 2 3 |
InetAddress . isReachable ( 2000 ) Result == > Ping failed for host : www . google . com Overloaded isReachable ( host , port , timeout ) Result == > Ping successful for host : www . google . com |