Menentukan Alamat IP Mesin Semasa di Java
Konteks:
Dalam sistem teragih dengan berbilang nod, setiap nod memerlukan alamat IP yang unik untuk berkomunikasi dengan berkesan. Alamat IP ini mesti didaftarkan dengan nod bootstrap pusat untuk sambungan yang lancar. Walau bagaimanapun, mendapatkan alamat IP yang betul boleh mencabar kerana kemungkinan komplikasi dengan konfigurasi rangkaian.
Masalah:
Pendekatan lalai menggunakan InetAddress.getLocalHost().getHostAddress( ) selalunya mengembalikan alamat IP LAN dan bukannya alamat IP PPP luaran. Ketidakpadanan ini menimbulkan kesukaran apabila nod cuba menyambung ke nod bootstrap atau nod lain.
Penyelesaian 1: Pengiraan Antara Muka Rangkaian
Untuk mendapatkan semula semua alamat IP tersedia yang dikaitkan dengan mesin, gunakan kod berikut:
Enumeration e = NetworkInterface.getNetworkInterfaces(); while (e.hasMoreElements()) { NetworkInterface n = (NetworkInterface) e.nextElement(); Enumeration ee = n.getInetAddresses(); while (ee.hasMoreElements()) { InetAddress i = (InetAddress) ee.nextElement(); System.out.println(i.getHostAddress()); } }
Pendekatan ini menyediakan senarai lengkap semua alamat IP. Walau bagaimanapun, membezakan alamat IP yang betul tetap mencabar.
Penyelesaian 2: Pembezaan Jenis Alamat IP
Tentukan jenis alamat IP berdasarkan julat nilainya:
InetAddress API menyediakan kaedah untuk menguji setiap jenis alamat untuk mengenal pasti alamat yang paling sesuai.
Penyelesaian 3: Pengambilan FQDN Luaran
Dapatkan nama domain berkelayakan sepenuhnya yang diiklankan secara luaran (FQDN) dan gunakannya untuk mencari alamat IP utama:
InetAddress inetAddress = InetAddress.getByName("myFQDN"); String ipv4Address = inetAddress.getHostAddress();
Kaedah ini bergantung pada resolusi DNS dan mungkin tidak boleh dilaksanakan dalam semua senario, terutamanya dengan adanya pengimbang beban.
Atas ialah kandungan terperinci Bagaimana untuk Menentukan Alamat IP Luaran Mesin dengan Boleh Dipercayai di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!