2010-02-22 7 views
21

मैं तारों को Inetaddress में परिवर्तित करने की कोशिश कर रहा हूं। मैं मेजबाननामों को हल करने की कोशिश नहीं कर रहा हूं: तार ipv4 पते हैं। InetAddress.getByName(String host) काम करता है? या क्या मुझे इसे मैन्युअल रूप से पार्स करना है?क्या जावा में स्ट्रिंग टू इनटैड्रेस को कन्वर्ट करने का कोई आसान तरीका है?

उत्तर

17

com.google.common.net.InetAddresses.forString(String ipString) इसके लिए बेहतर है क्योंकि यह किसी भी स्ट्रिंग को पारित किए बिना DNS लुकअप नहीं करेगा।

+0

यह [गुवा का] हिस्सा है (http://docs.guava-libraries.googlecode.com/git-history/v10.0.1/javadoc/com/google/common/net/InetAddresses.html)। –

+0

यह 'com.google.common.net.InetAddresses.forString' होना चाहिए (अपरकेस ए के साथ 'InetAddresses' के साथ)। इसलिए मुझे आपके उत्तर में इसे सही करने की अनुमति नहीं दी जाएगी, क्योंकि संपादन कम से कम 6 वर्ण होना चाहिए। ;-) वैसे भी, धन्यवाद, इसकी तलाश में था, और फिर भी फिर से गुवा दिन बचाता है। – silmeth

13

हाँ, यह काम करेगा। The API इस पर बहुत स्पष्ट है ("होस्ट का नाम या तो मशीन नाम हो सकता है, जैसे" java.sun.com ", या उसके आईपी पते का एक पाठ प्रस्तुतिकरण।"), और निश्चित रूप से आप आसानी से स्वयं को जांच सकते हैं।

+1

धन्यवाद, मैं एपीआई ऊपर देखा, और कहा कि लाइन याद किया। – TiansHUo

+0

जब होस्ट 1 9 2.168.0 जैसा पैटर्न है। *? क्या वह भी काम करेगा? Inet4Address दस्तावेज़ के संबंध में इसके लिए समर्थन लगता है। – Paranaix

+0

@ पाराएक्सएक्स, नहीं, यह "अवैध होस्ट वाइल्डकार्ड विनिर्देश" संदेश के साथ 'अवैध होस्ट वाइल्डकार्ड विनिर्देशन' –

3

सावधान: ऐसा लगता है कि एक अमान्य पता जैसे InetAddress.getByName("999.999.999.999") पार्स करने एक अपवाद में नहीं परिणाम एक प्रलेखन के वाक्यांश से उम्मीद कर सकते हैं के रूप में:

पते के प्रारूप की वैधता

चेक किया गया है

अनुभवजन्य रूप से, मुझे स्थानीय मशीन के कच्चे आईपी पते और होस्ट नाम के रूप में अमान्य आईपी पता के साथ एक इंट एड्रेस उदाहरण मिल रहा है। निश्चित रूप से यह मेरी अपेक्षा नहीं थी!

+2

जावा 7 के रूप में, यह एक अज्ञातहोस्ट अपवाद फेंक देगा; पहले जावा नहीं देखा है, लेकिन मैं वहां भी एक अपवाद की उम्मीद करता हूं। –

0

The open-source IPAddress Java library आईपीवी 6 और आईपीवी 4 के सभी मानक प्रस्तुतियों को मान्य करेगा और DNS लुकअप के बिना ऐसा करेगा। अस्वीकरण: मैं उस पुस्तकालय का प्रोजेक्ट मैनेजर हूं।

निम्नलिखित कोड है कि तुम क्या अनुरोध कर रहे हैं क्या करेंगे:

 String s = "1.2.3.4"; 
    try { 
      IPAddressString str = new IPAddressString(s); 
      IPAddress addr = str.toAddress(); 
      InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6 
      if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific 
       IPv4Address ipv4Addr = addr.toIPv4(); 
       Inet4Address inetAddr = ipv4Addr.toInetAddress(); 
       //use address 
      } 
     } catch(AddressStringException e) { 
      //e.getMessage has validation error 
     }