2009-12-10 12 views
71

फेंकता है मैं विभिन्न ऑपरेटिंग सिस्टम पर हमारे सर्वर-एप्लिकेशन (लिखित जावा) का परीक्षण कर रहा हूं और सोचा कि ओपन सोलालिस (2008.11) अच्छा जावा एकीकरण के कारण कम से कम परेशानी होगी। पता चला है मैं गलत था, जैसा कि मैंने एक UnknownHostExceptionInetAddress.getLocalHost() अज्ञातहोस्टएक्सप्शन

try { 
    computerName = InetAddress.getLocalHost().getHostName(); 
    if (computerName.indexOf(".") > -1) 
    computerName = computerName.substring(0, 
     computerName.indexOf(".")).toUpperCase(); 
} catch (UnknownHostException e) { 
    e.printStackTrace(); 
} 

उत्पादन होता है के साथ अंत:

java.net.UnknownHostException: desvearth01: desvearth01 
    at java.net.InetAddress.getLocalHost(InetAddress.java:1353) 

हालांकि, nslookup desvearth01 सही आईपी पते देता है, और nslookup localhost रिटर्न 127.0.0.1 अपेक्षा के अनुरूप। साथ ही, एक ही कोड फ्रीबीएसडी पर पूरी तरह से काम करता है। क्या OpenSolaris के लिए कुछ खास है जो मुझे पता नहीं है?

किसी भी संकेत की सराहना की, धन्यवाद।

उत्तर

105

अच्छा परंपरा में मैं एक बार फिर अपने ही सवाल का जवाब कर सकते हैं:

ऐसा लगता है कि InetAddress.getLocalHost() /etc/resolv.conf पर ध्यान नहीं देता है, लेकिन केवल/etc/hosts फाइल (जहां मैं कुछ भी उल्लेख नहीं किया गया था पर लग रहा है लोकलहोस्ट के अलावा)। इस फ़ाइल में आईपी और होस्टनाम जोड़ना समस्या हल करता है और अपवाद समाप्त हो गया है।


जवाब से ऊपर लगभग सही है और मैं ऊपर और मेरी समस्या से हल ... धन्यवाद संकेत मिला है।

लेकिन इसे सुधारने के लिए, मैं चरण-दर-चरण परिवर्तन जोड़ रहा हूं, ताकि यह भी बेवकूफ उपयोगकर्ताओं के लिए उपयोगी हो।

कदम:

  • ओपन/etc/hosts, प्रविष्टियों को नीचे की तरह लग रहे हो सकता है।

    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
    ::1   localhost localhost.localdomain localhost6 localhost6.localdomain6 
    
  • आप vi या एडिट की तरह किसी भी संपादक द्वारा इस के ऊपर एक और लाइन जोड़ने की जरूरत है। <your-machine-ip> <your-machine-name> localhost उदाहरण के लिए।

    192.168.1.73 my_foo localhost 
    

अब, समग्र फ़ाइल इस तरह दिखना हो सकता है:

192.168.1.73 my_foo localhost 
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1   localhost localhost.localdomain localhost6 localhost6.localdomain6 
  • बस इसे बचाने के लिए और फिर अपने जावा चलाने ... कोड अपने काम किया जाता है।
  • सोलारिस
+1

यदि आपको मेजबान फ़ाइल में लिखने का प्रयास करते समय अनुमति समस्याएं आती हैं, तो यहां निर्देश मदद करेंगे: http: //decoding.wordpress.com/2009/04/06/how-to-edit-the-hosts-file -इन-मैक-ओएस-एक्स-तेंदुए/ – septerr

+3

ओएस एक्स और जावा 7 में एक बग भी है, यहां विवरण और वर्कअराउंड https://groups.google.com/forum/#!topic/h2-database/DuIlTLN5KOo –

+11

'127.0.0.1 लोकलहोस्ट 'सेट करना मेरे लिए पर्याप्त था –

4

होस्ट लुकअप का उपयोग करता /etc/nsswitch.conf तो क्या पर निर्भर करता है 'मेजबान:' लाइन यह निर्धारित करता है कि /etc/hosts, एनआईएस, डीएनएस और/या LDAP परामर्श किया जाना चाहिए कहते हैं।

आप केवल मेजबान और DNS का उपयोग करते हैं आप /etc/nsswitch.conf में यह होना चाहिए:

hosts: files dns

कारण क्योंकि nslookup आदेश सीधे /etc/resolv.conf सलाह भी लेता है nslookup desvearth01 काम करता है।यदि आप एक बेहतर कमांड लाइन परीक्षण करना चाहते हैं, तो कमांड का उपयोग करें:

getent hosts desvearth01
+0

बहुत उपयोगी! यह मुझे समझने के लिए दिन लग गए। – Tilo

0

मुझे इसके आसपास के मुद्दे भी हैं। मुझे और परीक्षण करने की ज़रूरत है, लेकिन ऐसा लगता है कि NetworkInterface.getNetworkInterfaces() अधिक विश्वसनीय हो सकता है। मुझे लगता है कि यह लुकअप नहीं करता है, लेकिन सिर्फ आईपी पकड़ता है।

getLocalHost() विफल होने पर मैं इसे 'अगली सर्वश्रेष्ठ' के रूप में उपयोग कर रहा हूं।

1

आपhostname superhost.domainCOMMAND के साथ इस संदेश से आप होस्ट नाम सेट की जरूरत को देखते हैं!

इसके बाद, जांचें कि /etc/hosts फ़ाइल में 127.0.0.1 localhost जैसी स्ट्रिंग है।

इसके अलावा

, जाँच लें कि आदेश इस तरह uname -a रिटर्न कुछ:

लिनक्स superhost.domain 2.6.38-8-सर्वर # 42 उबंटू SMP सोम अप्रैल 11 03:49:04 यूटीसी 2011 x86_64 x86_64 x86_64 जीएनयू/लिनक्स

यह पसंद नहीं !!!!

लिनक्स (कोई नहीं) 2.6.38-8-सर्वर # 42 उबंटू SMP सोम अप्रैल 11 03:49:04 यूटीसी 2011 x86_64 x86_64 x86_64 जीएनयू/लिनक्स

0

एक अन्य विकल्प है इस पोस्ट में (वास्तव में, आपके मेजबाननाम के लिए आपके/etc/sysconfig/network फ़ाइल में क्या है ... इसे किसी FQDN नाम में बदलकर इस समस्या को हल करता है)।

java getLocalHost() UnknownHostException /etc/hosts file differs linux api?

2

चेकआउट /etc/होस्ट नाम तो होस्ट फ़ाइल से आपके होस्टनाम डाल दिया।

2

मैं जब InetAddress.getLocalHost() फेंकता एक UnknownHostException के लिए वापस गिरावट के रूप में NetworkInterface.getNetworkInterfaces() का उपयोग करें। यहां कोड है (स्पष्टता के लिए अपवाद हैंडलिंग के बिना)।

Enumeration<NetworkInterface> iterNetwork; 
Enumeration<InetAddress> iterAddress; 
NetworkInterface network; 
InetAddress address; 

iterNetwork = NetworkInterface.getNetworkInterfaces(); 

while (iterNetwork.hasMoreElements()) 
{ 
    network = iterNetwork.nextElement(); 

    if (!network.isUp()) 
     continue; 

    if (network.isLoopback()) // If I want loopback, I would use "localhost" or "127.0.0.1". 
     continue; 

    iterAddress = network.getInetAddresses(); 

    while (iterAddress.hasMoreElements()) 
    { 
    address = iterAddress.nextElement(); 

    if (address.isAnyLocalAddress()) 
     continue; 

    if (address.isLoopbackAddress()) 
     continue; 

    if (address.isMulticastAddress()) 
     continue; 

    return(address.getHostAddress()); 
    } 
} 
3

यह त्रुटियों पता चलता है जब मैं Glassfish 2. कार्य केंद्र नाम और कोशिश की शुरुआत बदल तुम भी, कुछ इस तरह etc/hosts पर/प्रविष्टि का नाम बदलने चाहिए:

127.0.0.1  localhost 
127.0.1.1  MyNewName 
+0

यह मेरे लिए काम किया - धन्यवाद! –

3

मेरी अमेज़न उदाहरण पर मुझे एक ही समस्या थी, डिफ़ॉल्ट DNS कॉन्फ़िगरेशन समस्या थी।तो इस मुद्दे को ठीक करने के लिए मैं इन चरणों का किया था - होस्ट नाम के लिए

$ping ip-10-122-16-169 
ping: unknown host ip-10-122-16-169 

बिल्ली /आदि

अपने होस्ट नाम मिल

$hostname 
ip-10-122-16-169 

पिंग/मेजबान फ़ाइल, आप

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1   localhost6 localhost6.localdomain6 

अब तुम सिर्फ मुट्ठी पंक्ति के अंत में अपने होस्ट नाम संलग्न करने के लिए की जरूरत है, इसलिए जब आप संलग्न यह

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ip-10-122-16-169 
::1   localhost6 localhost6.localdomain6 
तरह दिखेगा की तरह कुछ मिल जाएगा

अब आप फिर से एक ही होस्ट नाम

पिंग जांच करने के लिए जाने के लिए तैयार, कर रहे हैं
$ping ip-10-122-16-169 
PING localhost (127.0.0.1) 56(84) bytes of data. 
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=255 time=0.018 ms 
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=255 time=0.024 ms 
संबंधित मुद्दे