2013-01-14 42 views
7

जावा 7 वर्ग java.net.InetAddress के लिए एक नया स्थिर विधि कहते हैं:स्थिर InetAddress.getLoopbackAddress() वापस क्या करता है?

static InetAddress getLoopbackAddress() 
Returns the loopback address. 

अब मुझे आश्चर्य है कि क्या पता परिणाम, IP4 या ip6 में समाहित कर दिया जाएगा।

documentation विषय पर एक सा धूमिल है:

InetAddress लौटे आईपीवी 4 लूपबैक पता, 127.0.0.1, या IPv6 लूपबैक पता, :: 1 का प्रतिनिधित्व करेंगी। आईपीवी 4 लूपबैक पता वापस 127 में से एक है। । *

कैसे जावा तय करता 127.0.0.1 या IPv6 पेंडेंट ::1 वापस जाने के लिए है कि क्या?

या वे दोनों एक ही InetAdress ऑब्जेक्ट द्वारा प्रतिनिधित्व कर रहे हैं?

क्या परिणाम हमेशा वही होता है? क्या यह मेरे नेटवर्क कार्ड पर निर्भर करता है?

उत्तर

4

सबसे पहले, .getLocalHost() और इस विधि में एक बुनियादी अंतर है: .getLocalHost(), मशीन नाम के साथ पंजीकृत पता मिल जाएगा जबकि .getLoopbackAddress()-केवल स्थानीय, लूपबैक पता वापस आ जाएगी।

लौटे पते के रूप में, यह ओएस निर्भर है। हालांकि, अगर आप JVM गुजर JVM तर्क को -Djava.net.preferIPv4Stack=true द्वारा प्राथमिकता में आईपीवी 4 उपयोग करने के लिए प्रभावित कर सकते हैं, या का उपयोग करके:

System.setProperty("java.net.preferIPv4Stack" , "true"); 
4

आप एक IPv6 ढेर है और जावा आईपीवी 4 पसंद करते हैं करने के लिए कॉन्फ़िगर नहीं है, तो यह वापस आ जाएगी :: 1।

अन्यथा यह 127.0.0.1 वापस आ जाएगा।

+0

सुनिश्चित नहीं है कि यह सही है। कम से कम जावा 7 में डिफ़ॉल्ट सेटिंग आईपीवी 6 ** स्टैक ** पसंद करना है, लेकिन आईपीवी 4 ** पतों को पसंद करने के लिए ** (अंतर ध्यान दें)। इसका मतलब है कि 'InetAddress.getLoopbackAddress() 'अधिकांश आधुनिक ओएस पर डिफ़ॉल्ट रूप से एक आईपीवी 4 पता वापस कर देगा। इसे नियंत्रित करने के लिए [दो अलग-अलग गुण] हैं (http://docs.oracle.com/javase/7/docs/technotes/guides/net/ipv6_guide/#ipv6-networking)। – peterh

+0

मुझे पूरा यकीन है कि ईजेपी पूरी तरह से सही है, उसने अपने जवाब में "आईपीवी 4" के बाद निहित "पते" को छोड़ दिया।यदि कोई आईपीवी 6 स्टैक मौजूद है (जो एक संपत्ति है, यदि आप अपना लिंक पढ़ते हैं, तो * हटाया गया * है जब आप पसंदीदा स्टैक को आईपीवी 4 मानते हैं), लेकिन आईपीवी 4 पते को प्राथमिकता नहीं दी जाती है, तो आईपीवी 6 पते को डिफॉल्ट किया जाएगा। – codetaku

6

मेरा मानना ​​है कि यहां दिए गए अन्य उत्तरों गलत हैं।

जावा डिफ़ॉल्ट रूप से, आईपीवी 6 ढेर (यदि उपलब्ध हो) पसंद करते हैं लेकिन IPv4 पतोंपसंद करती हैं। सूक्ष्म अंतर पर ध्यान दें। यह java.net.preferIPv4Stack और java.net.preferIPv6Addresses सिस्टम गुणों द्वारा नियंत्रित किया जाता है, जिनमें से दोनों गलत हैं।

इसलिए, InetAddress.getLoopbackAddress() लगभग हमेशा एक आईपीवी 4 पता लौटाएगा। आपको IP126 पता वापस करने के लिए सिस्टम गुण true पर सेट करना होगा।

मुझे जेडीके स्रोतों में इस विधि के नतीजे के लिए कोई ओएस निर्भरता दिखाई नहीं दे रही है। मैं एक ओएस के बारे में नहीं सोच सकता जहां जावा नहीं होगा (डिफ़ॉल्ट सेटिंग्स के साथ) इस विधि के लिए एक आईपीवी 4 पता लौटाएगा।

+0

क्या आप सुनिश्चित हैं कि _preferIPv6Addresses = false_ स्वचालित रूप से इंगित करता है कि यह आईपीवी 4 पते पसंद करता है? इसका मतलब यह हो सकता है कि इसमें कोई विशेष वरीयता नहीं है। – magnattic

+0

@atticae। जेडीके स्रोतों के माध्यम से गए और साथ ही एक परीक्षण किया। तो, हाँ, मुझे यकीन है। मैं केवल 'java.net.preferIPv6Addresses'' के बारे में बात कर सकता हूं 'InetAddress.getLoopbackAddress()' विधि के परिणाम पर लागू होता है क्योंकि यह केवल इस विधि के लिए है, मैंने स्रोत कोड में खोला है। – peterh