मैं Apache Commons HttpClient का उपयोग करके इसे हल करने में सक्षम था, नीचे कोड स्निपेट देखें।
जैसा कि मुझे डर था, java.net द्वारा प्रदान किया गया URLConnection एक बहुत ही सरल कार्यान्वयन है और केवल हल की गई सूची से पहला आईपी पता आज़माएगा। यदि आपको वास्तव में किसी अन्य लाइब्रेरी का उपयोग करने की अनुमति नहीं है, तो आपको अपनी खुद की त्रुटि प्रबंधन लिखनी होगी। यह थोड़ी गन्दा है, क्योंकि आपको इनएट एड्रेस का उपयोग करके हाथ से पहले सभी आईपी को हल करने की आवश्यकता होगी, और प्रत्येक आईपी से "होस्ट: डोमेन.नाम" हेडर को HTTP स्टैक पर पास करने के लिए कनेक्ट करें जब तक कि आईपी में से कोई जवाब न दे।
अपाचे लाइब्रेरी बहुत अधिक मजबूत है और अनुकूलन का एक बड़ा सौदा करने की अनुमति देता है। आप नियंत्रित कर सकते हैं कि यह कितनी बार पुनः प्रयास करेगा और, सबसे महत्वपूर्ण बात यह है कि यह स्वचालित रूप से उसी नाम पर हल किए गए सभी आईपी पतों को आजमाएगा जब तक कि उनमें से कोई सफलतापूर्वक प्रतिक्रिया न दे।
HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {
@Override
public boolean retryRequest(IOException exception, int count, HttpContext context) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
return count < 30;
}
};
ConnectionKeepAliveStrategy keepAlive = new ConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
return 500;
}
};
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter("http.socket.timeout", new Integer(2000));
httpclient.getParams().setParameter("http.connection.timeout", new Integer(2000));
httpclient.setHttpRequestRetryHandler(myRetryHandler);
httpclient.setKeepAliveStrategy(keepAlive);
HttpGet httpget = new HttpGet("http://remotehost.com");
HttpResponse httpres = httpclient.execute(httpget);
InputStream is = httpres.getEntity().getContent();
मुझे आशा है कि इससे मदद मिलती है!
यदि पैरामीटर आईपी के बजाय यूआरएल है, तो आपको इसकी परवाह करने की आवश्यकता नहीं है। – Jacob