วิธีการใช้ InetAddress.isReachable (ที่อยู่สตริง, พอร์ต int, การหมดเวลา int) ของคุณเองใน Java?
เผยแพร่แล้ว: 2020-10-06
ใน Java มีหลายวิธีในการตรวจสอบ ping และการตรวจสอบพอร์ต คุณสามารถใช้คำสั่ง ping ของระบบเริ่มต้น ยูทิลิตี้ InetAddress
เมธอดดั้งเดิมของ Java, HttpURLConnection
และอื่นๆ
ในสภาพแวดล้อมการใช้งานจริงหรือการทดสอบของคุณ หากคุณต้องการตรวจสอบพอร์ตหลาย ๆ ครั้ง สมมติว่ามีการตรวจสอบหลายร้อยรายการพร้อมกัน บางครั้งเมธอด InetAddress.isReachable()
ก็ไม่ได้รับการตอบสนองที่ถูกต้อง
กรณีของฉันติดเชื้อ ฉันสังเกตเห็นความล้มเหลว 100% ขณะพยายามเชื่อมต่อกับ www.google.com คุณมีคำถามด้านล่างหรือไม่?
- java – เหตุใด InetAddress.isReachable จึงคืนค่าเป็นเท็จ เมื่อฉันสามารถ ping ที่อยู่ IP ได้
- วิธีตรวจสอบว่าฉันมีการเชื่อมต่ออินเทอร์เน็ตหรือไม่
- ตัวอย่างโค้ด Java สำหรับ java.net.InetAddress.isReachable()
- java ตรวจสอบว่าสามารถเข้าถึงที่อยู่ IP ได้หรือไม่
- วิธีทดสอบว่าสามารถเข้าถึงระบบระยะไกลได้หรือไม่?
ทำตามบทช่วยสอนนี้หากคุณต้องการตรวจสอบ ping โดยใช้ HttpURLConnection.openConnection()
ในบทช่วยสอนนี้ เราจะพูดถึง 2 วิธีที่แตกต่างกันในการตรวจสอบ Ping:
- InetAddress.isReachable (หมดเวลา) วิธีการ
- crunchifyAddressReachable
crunchifyAddressReachable(host, port, timeout)
ของ Crunchify ซึ่งใช้งานได้ 100% ของเวลาทั้งหมด
มาเริ่มกันเลย:
- สร้างคลาส CrunchifyInetAddressIsReachable.java
- เราจะสร้าง 2 วิธีคือ pingCheckbyInetAddressisReachable() และ pingCheckbyCrunchifyisReachable() ซึ่งเราจะทำการทดสอบ 2 แบบข้างต้น
เราใช้วิธีการใด crunchifyAddressReachable()
เรากำลังใช้ java.net.Socket
ในการใช้งานของเรา คลาสซ็อกเก็ตใช้ซ็อกเก็ตไคลเอนต์ ด้วยความช่วยเหลือของยูทิลิตี้ connect()
เราได้รับผลลัพธ์ที่ถูกต้อง 100% โปรดดูรหัสด้านล่างสำหรับรายละเอียดเพิ่มเติม
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 ( ) ; } } } |
เมื่อคุณคัดลอกโค้ดไปยังสภาพแวดล้อม Eclipse เพียงเรียกใช้เป็น Java Application เพื่อดูผลลัพธ์ด้านล่าง

เอาต์พุตคอนโซล:
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 |