http post请求获取SocketTimeoutException

时间:2013-05-03 08:18:02

标签: android

我正在尝试配置HTTP POST请求,但我始终获得SocketTimeoutException。 有谁知道我的代码出了什么问题?

int TIMEOUT_MILLISEC = 60000;  // = 60 seconds
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);

client = new DefaultHttpClient(httpParams);

StringBuilder builder = new StringBuilder(URL_STRING); 

HttpPost request = new HttpPost(builder.toString());

request.setEntity(new ByteArrayEntity(jobj.toString().getBytes("UTF8")));

HttpResponse response = client.execute(request);

2 个答案:

答案 0 :(得分:3)

参考此代码。它将帮助您理解处理几乎所有基本的HttpClient异常。     试试{

    // check for request method
    if (method == "POST") {
        // request method is POST
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        // new
        HttpParams httpParameters = httpPost.getParams();
        // Set the timeout in milliseconds until a connection is
        // established.
        int timeoutConnection = 10000;
        HttpConnectionParams.setConnectionTimeout(httpParameters,
                timeoutConnection);
        // Set the default socket timeout (SO_TIMEOUT)
        // in milliseconds which is the timeout for waiting for data.
        int timeoutSocket = 10000;
        HttpConnectionParams
                .setSoTimeout(httpParameters, timeoutSocket);
        // new
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } else if (method == "GET") {
        // request method is GET
        DefaultHttpClient httpClient = new DefaultHttpClient();
        String paramString = URLEncodedUtils.format(params, "utf-8");
        url += "?" + paramString;
        HttpGet httpGet = new HttpGet(url);
        // new
        HttpParams httpParameters = httpGet.getParams();
        // Set the timeout in milliseconds until a connection is
        // established.
        int timeoutConnection = 10000;
        HttpConnectionParams.setConnectionTimeout(httpParameters,
                timeoutConnection);
        // Set the default socket timeout (SO_TIMEOUT)
        // in milliseconds which is the timeout for waiting for data.
        int timeoutSocket = 10000;
        HttpConnectionParams
                .setSoTimeout(httpParameters, timeoutSocket);
        // new
        HttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
    }

} catch (UnsupportedEncodingException e) {
    throw new Exception("Unsupported encoding error.");
} catch (ClientProtocolException e) {
    throw new Exception("Client protocol error.");
} catch (SocketTimeoutException e) {
    throw new Exception("Sorry, socket timeout.");
} catch (ConnectTimeoutException e) {
    throw new Exception("Sorry, connection timeout.");
} catch (IOException e) {
    throw new Exception("I/O error(May be server down).");
}

答案 1 :(得分:0)

无需设置套接字超时。 删除此行:
HttpConnectionParams.setSoTimeout(httpParams,TIMEOUT_MILLISEC);