我正在尝试从我的Android应用程序到一台PC上的C#应用程序执行httpget。通信本身工作正常,但是当C#应用程序不可用时,android端的请求需要很长时间才能超时,我希望能够调整。
我已经在stackoverflow上找到了一些处理这个问题的答案,比如How to set HttpResponse timeout for Android in Java
正如您在下面的代码中所看到的,我已经实现了建议的解决方案:
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
HttpClient httpClient = new DefaultHttpClient(httpParams);
// Not sure whether the HttpContext is necessary
//HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://mydnsname:myport/etc");
String text = null;
try
{
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
text = getASCIIContentFromEntity(entity);
}
catch (Exception e)
{
text = e.getLocalizedMessage();
}
然而,当使用这个解决方案时,超时仍然需要大约25-35秒,之后我得到一个ConnectTimeoutException,文本是“连接到/ my-ip:myport超时”。
任何人都可以帮我弄清楚为什么5秒或3秒的设定超时不起作用?
仅供参考:我使用的是org.apache.http.client.HttpClient,此代码位于AsyncTask中。
提前感谢您的帮助。