@ Kuester2000 এর উত্তর কাজ করে না এমন কথা বলার জন্য, দয়া করে সচেতন হন HTTP র অনুরোধ, প্রথমে একটি ডিএনএস অনুরোধ সহ হোস্ট আইপি সন্ধান করার চেষ্টা করুন এবং তারপরে সার্ভারে প্রকৃত এইচটিটিপি অনুরোধ করুন, যাতে আপনার একটি সেটও সেট করতে হতে পারে ডিএনএস অনুরোধের সময়সীমা শেষ।
যদি আপনার কোড DNS অনুরোধের সময়সীমা ছাড়াই কাজ করে তবে এটি কারণ আপনি কোনও ডিএনএস সার্ভারে পৌঁছাতে সক্ষম হন বা আপনি অ্যান্ড্রয়েড ডিএনএস ক্যাশে হিট করছেন। উপায় দ্বারা আপনি ডিভাইসটি পুনরায় চালু করে এই ক্যাশেটি সাফ করতে পারেন।
এই কোডটি একটি কাস্টম সময়সীমার সাথে একটি ম্যানুয়াল ডিএনএস লুকআপ অন্তর্ভুক্ত করার জন্য মূল উত্তরটি প্রসারিত করে:
//Our objective
String sURL = "http://www.google.com/";
int DNSTimeout = 1000;
int HTTPTimeout = 2000;
//Get the IP of the Host
URL url= null;
try {
url = ResolveHostIP(sURL,DNSTimeout);
} catch (MalformedURLException e) {
Log.d("INFO",e.getMessage());
}
if(url==null){
//the DNS lookup timed out or failed.
}
//Build the request parameters
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, HTTPTimeout);
HttpConnectionParams.setSoTimeout(params, HTTPTimeout);
DefaultHttpClient client = new DefaultHttpClient(params);
HttpResponse httpResponse;
String text;
try {
//Execute the request (here it blocks the execution until finished or a timeout)
httpResponse = client.execute(new HttpGet(url.toString()));
} catch (IOException e) {
//If you hit this probably the connection timed out
Log.d("INFO",e.getMessage());
}
//If you get here everything went OK so check response code, body or whatever
ব্যবহৃত পদ্ধতি:
//Run the DNS lookup manually to be able to time it out.
public static URL ResolveHostIP (String sURL, int timeout) throws MalformedURLException {
URL url= new URL(sURL);
//Resolve the host IP on a new thread
DNSResolver dnsRes = new DNSResolver(url.getHost());
Thread t = new Thread(dnsRes);
t.start();
//Join the thread for some time
try {
t.join(timeout);
} catch (InterruptedException e) {
Log.d("DEBUG", "DNS lookup interrupted");
return null;
}
//get the IP of the host
InetAddress inetAddr = dnsRes.get();
if(inetAddr==null) {
Log.d("DEBUG", "DNS timed out.");
return null;
}
//rebuild the URL with the IP and return it
Log.d("DEBUG", "DNS solved.");
return new URL(url.getProtocol(),inetAddr.getHostAddress(),url.getPort(),url.getFile());
}
এই ক্লাসটি এই ব্লগ পোস্ট থেকে । যান এবং মন্তব্যগুলি এটি ব্যবহার করবেন কিনা তা পরীক্ষা করে দেখুন।
public static class DNSResolver implements Runnable {
private String domain;
private InetAddress inetAddr;
public DNSResolver(String domain) {
this.domain = domain;
}
public void run() {
try {
InetAddress addr = InetAddress.getByName(domain);
set(addr);
} catch (UnknownHostException e) {
}
}
public synchronized void set(InetAddress inetAddr) {
this.inetAddr = inetAddr;
}
public synchronized InetAddress get() {
return inetAddr;
}
}