जावा में, InetAddress.getLocalHost () और InetAddress.getByName ("127.0.0.1") के बीच क्या अंतर है

मैं विंडोज 8 जेडीके 1.7 के साथ उपयोग कर रहा हूं। मेरा आईपी पता 192.168.1.108 है, जब मैं दौड़ रहा हूं:

System.out.println(InetAddress.getLocalHost().equals(InetAddress.getByName("localhost"))); 

या

System.out.println(InetAddress.getLocalHost().equals(InetAddress.getByName("127.0.0.1")));

आउटपुट - यह सब झूठा है।

InetAddress.getLocalHost() - Output: 192.168.1.108      
InetAddress.getByName("localhost") - Output: 127.0.0.1

और भी, मेरे यूडीपी सर्वर को InetAddress.getLocalHost() पर बाध्य किया गया है और क्लाइंट से कुछ भी प्राप्त नहीं हो सकता है यदि क्लाइंट InetAddress.getByName ("localhost") पर पैकेट भेजता है । हालांकि, यह क्लाइंट InetAddress.getLocalHost() पर भेजता है, तो यह अच्छी तरह से काम करता है। पोर्ट कोरेंट है।

किसी को अंतर पता है? अग्रिम में धन्यवाद।

0
नहीं, System.out.println (InetAddress.getByName ("localhost")। बराबर और zwnj; (InetAddress.getByNa और zwnj; मुझे ("127.0.0.1"))) मुझे सच देता है
जोड़ा लेखक user3057903, स्रोत
शायद getLocalHost() विधि नाम संकल्प करता है और पते को 127.0.0.1 (या किसी अन्य आईपी) को हल करता है। तो सवाल बन जाता है: लोकहोस्ट और 127.0.0.1 के बीच क्या अंतर है। यहां देखें: stackoverflow.com/questions/7382602/…
जोड़ा लेखक Utku Özdemir, स्रोत
चूंकि दोनों getByName और getLocalhost विधियां आपको InetAddress ऑब्जेक्ट लौटाती हैं। बराबर विधि को InetAddress क्लास में ओवरराइड किया गया है यदि आईपी समान हैं तो सत्य वापस आना। यहां जांचें: docs.oracle.com/javase/7/docs/api/java/net/…
जोड़ा लेखक Utku Özdemir, स्रोत

2 उत्तर

विज्ञापन 1 आपको अपने लैन/वैन में अपना पता देता है, ऐसा लगता है (मेरा मतलब है स्थानीय/निजी नेटवर्क आईपी पते उदा। 1 9 2.168.0.108 या 10.3.6.55 की तरह)।

यह भी देखें:

http://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces

http://डाउनलोड .java.net/jdk7/संग्रह/b123/docs/api/जावा/शुद्ध/InetAddress.html # getLocalHost% 28% 29

लेकिन ध्यान दें कि ad2 और ad3 मेरे उदाहरण में बराबर हैं।

import java.net.InetAddress;

public class Test014 {

    public static void main(String[] args) throws Exception {
        InetAddress ad1 = InetAddress.getLocalHost();
        InetAddress ad2 = InetAddress.getByName("localhost");
        InetAddress ad3 = InetAddress.getByName("127.0.0.1");

        printArr(ad1.getAddress());
        printArr(ad2.getAddress());
        printArr(ad3.getAddress());

        System.out.println(ad1.equals(ad2));
        System.out.println(ad1.equals(ad3));
        System.out.println(ad2.equals(ad3));
    }

    static void printArr(byte[] arr){
        for (int i=0; i

साथ ही, एपीआई दस्तावेज़ों को जांचें कि बराबर विधि कब सही होती है और जब झूठी होती है।

http : //download.java.net/jdk7/archive/b123/docs/api/java/net/InetAddress.html#equals%28java.lang.Object%29

0
जोड़ा
मुझे लगता है - वास्तव में नहीं। यहाँ देखें। जोड़ा लेखक peter.petrov, स्रोत
अब मैं समझता हूं कि बराबर वापसी क्यों झूठी है। लेकिन मेरे पास केवल एक नेटवर्क एडाप्टर है। यदि मैं 1 9 2.168.1.108 को udp सॉकेट बांधता हूं, तो क्या मुझे 127.0.0.1 को भेजा गया पैकेट भी प्राप्त किया जाना चाहिए, क्या मैं सही हूँ?
जोड़ा लेखक user3057903, स्रोत

GetLocalHost() के लिए जेडीके दस्तावेज़ से:

स्थानीय होस्ट का पता देता है। यह सिस्टम से मेजबान का नाम पुनर्प्राप्त करके हासिल किया जाता है, फिर उस नाम को एक InetAddress में हल किया जाता है।

मेरे जीएनयू/लिनक्स बॉक्स में, मेरा होस्ट नाम "लैपटॉप" है, जिसे 127.0.0.1 से अलग/पते/मेजबान से अलग पते पर मैप किया गया है। विंडोज़ में सी: \ विंडोज \ System32 \ drivers \ etc \ hosts पर एक समतुल्य फ़ाइल है।

डिफ़ॉल्ट रूप से यह होस्ट फ़ाइल DNS लुकअप से पहले खोजी जाती है।

0
जोड़ा