httpurlconnection SocketTimeoutException on android 5.1 ,and



我使用httpurlconnection发送一个发布请求,但是我在与Android 5.1上方的服务器进行通信时获得了java.net.SocketTimeoutException例外情况(包括Android 5.1),但以下是Android 5.1 5.1邮政请求是正常的。在这里是我的代码:

>
String postMethod() throws IOException {
    String json = JsonParser.toJson(req);
    Log.d("dzq", "request:" + json);
    if (TextUtils.isEmpty(json)) return null;
    byte[] data = json.getBytes();
    GZIPInputStream gzipInputStream;
    ByteArrayOutputStream baos;
    InputStream inStrm;
    HttpURLConnection conn;
    conn = (HttpURLConnection) new URL(url).openConnection();
    conn.setReadTimeout(60*1000);
    conn.setConnectTimeout(60*1000);
    conn.setRequestMethod("POST");
        /* 允许Input、Output,不使用Cache */
    conn.setDoInput(true); // 表示从服务器获取数据
    conn.setDoOutput(true);// 表示向服务器写数据
    conn.setUseCaches(true); //不使用缓存,每次请求的数据,都需要是新的
    conn.setRequestProperty("Content-Type", "application/x-tar");
    conn.setRequestProperty("Content-Length", String.valueOf(data.length));
    conn.setRequestProperty("Accept-Encoding", "gzip");
    conn.setRequestProperty("Connection", "Keep-Alive");
    conn.setRequestProperty("Charset", "UTF-8");
    BufferedOutputStream bos = new BufferedOutputStream(conn.getOutputStream());
    bos.write(json.getBytes());
    bos.flush();
    bos.close();
    int status;
    inStrm = conn.getInputStream(); // <===注意,实际发送请求的代码段就在这里
    status = conn.getResponseCode();
    if (status == HttpURLConnection.HTTP_OK) {
        String contentEncoding = conn.getContentEncoding();
        /** 判断是否是GZIP **/
        boolean isGzipEncoding = false;
        // 读取数据
        if ((null != contentEncoding)
                && contentEncoding.equalsIgnoreCase("gzip")) {
            isGzipEncoding = true;
        }
        if (isGzipEncoding) {
            // 如果是GZIP压缩
            gzipInputStream = new GZIPInputStream(inStrm);
            baos = new ByteArrayOutputStream();
            byte[] readBuffer = new byte[1024];
            int len;
            while ((len = gzipInputStream.read(readBuffer)) != -1) {
                baos.write(readBuffer, 0, len);
            }
            return baos.toString("utf-8");
        } else {
            baos = new ByteArrayOutputStream();
            int len;
            byte[] readBuffer = new byte[1024];
            while ((len = inStrm.read(readBuffer)) != -1) {
                baos.write(readBuffer, 0, len);
            }
            return baos.toString("utf-8");
        }
    }
    conn.disconnect();
    try {
        if (null != inStrm) {
            inStrm.close();
        }
    } catch (Exception ignored) {
    }
    return null;
}

json:

{
  "userAgent": {
    "imsi": "460013882300329",
    "imei": "867694020669042",
    "androidSystemVer": "5.1.1",
    "screenSize": "1440*2560",
    "ramSize": "3712",
    "romSize": "56056",
    "cpu": "AArch64 Processor rev 2 (aarch64) ",
    "hsman": "Xiaomi",
    "hstype": "MI NOTE Pro",
    "networkType": "3",
    "provider": "中国联通",
    "packageName": "com.jolo.push4_0",
    "apkVer": "1.0001",
    "dpi": "640",
    "apkVerInt": "100001",
    "mac": "58:44:98:43:fe:cd",
    "installTime": "1482807931757",
    "terminalId": "",
    "channelCode": "74999699",
    "lat": "0.0",
    "lng": "0.0"
  },
  "businessCode": 2001,
  "uuid": "",
  "userApks": "H4sIAAAAAAAAAFVW23KjOhD8FT+eU+WdkrhTftqn87TfkBKggGKQCAI7+OtPj4SdbKUSOdagmenpbtG6iYa5Wahx3j8GMxt7OueUitO5Si4tdkfnrvxLX8b2g7P9uzavL09nSQiVF7f01Ot1VHbVi6VjPZ1TSig//ZMIWUiRZCSrpEjkv6dzkhQiy2VShyTWKNfrxnwY7JAgiTPLsDO5fvsw+nSuSeInzUrkq6UUQoR9ZbvFmY4aZa+qaTljHkpKw/aHG6zdqccu14pzY1fejNq2uttWulp3v2u1DnoJIaj3LLNLa4kD3awtinAtwyIowyKymNq8j/uqr+RnrduhHd3WBTwIxeUpPvISIjujLJDt6SZjI6EHIeMxD+U65aifPT+ehvz5pZ0ampuYVXLWGP2+WT8YZ+lmOu1oHtXOdQs8J3FqEktrlOk2Mnbe1rfJ3IrTuQAsOeBHiBSXSZMeAWpJCZIlEeqVEbErTROHp5Riry7igR7HdaYzNHvbc8IDDFnFDvddr54eZtoeW0RRRBS55BEleve+Mo520arTy8yDEoRyUlE9Z/kYlANM5F1r1MhFZAQciyz90dRqdKPQlDUcUINfTBYhkzwt0uSvRlZ31ZajKi61zCOh3lUAsFfjqJed9KT60/lPBYImIk3Frz+/Gcbnv5FFmF//otry9aFuSs0zN8rQhpir23DuFYxaFd1275ZIhtCkzMqyTLjTEHvHUQ60VqR3PevVPBjSlAJBZV4c1B0xXxyavYlwlBBJIBXWEKBpXtyHbtegGd6KglXA2D4Gt02O7loDg44PTxnLMrLIb7NeWj2O1I6Aw71jsZ7u3Qd0T6WomRdVKo+xmAHTV2bcnxhwxoKLLfNYy7IpO8EYzDq4SQcVJgyjEGl+cFJvgQN660wQUxr4c3BPz3dtrpri359Zvkn9xL8dlpAjZ3iTUmRUsa7xQVTyQDiA1+nJtW6zq+++nco4mpTF/LF90yP0vYTWOJkUIaaAveQiku7T7ObQGk55yq2UDFAp/+bb5BrYyucnU67ggCyP1XSPTzLgmV61X1+VRHtrrzCGxq0HW/BQ2NgaDEg1gRUyeAJzEgySR2FfOBDVKAjim5uMa0ZFzaOGIo7xodluczyeZZk+grz0ukfC1cyb6secXyfBrAOtnk1M6go8rd4JNwW13q/b6pYgVPA2DR1ZmES7YnnOqjO9YXrT0I3927IPjbfJG6Qlaga8DuKoq79gtPruuZGESiyJOBhyw4Xi1mBaNe9IUdZlGR+1QFZ5TTe2ay49JfFU8cGe3rl+fFEreuOkQdeO4Dm7CY8lLEGJWwn1lb/UMmnVmF+3UmETvillfvgBEGUKwQSAyzhyuUUAS5TZQQr+nu5mgdH62E8RxpIelukntazGg4s+fn53I5yRlFORCyWaLGPznztvHKXzP/0GSnJYUKqsD0tQGIlVN0Psj5OaGayKrwaZA++8OrCwznWjbhVLbVydV90NwG+LjhcQdJlFDxoNhgLqR9Pm3UCJg1k7XheUYx5V/G2aJBf9BVch36PhP0XQEzvakdYbq1jhjWOFgF0oPU0P2+pgsfz7ypWjN7746qiUVbkGt2Rc+PnoeVl+qEG5yUQcnw6E7JLtWeBN42fQgFcejb4HZmASrs30OdknkcJtPm3etK/2quKy3rhMCGEjKN0EokWNpGx1FzxNzrcD9xnuhxs4TPKfQEPIOE/4zefwYP19o/wezaz2/2YolUcgwrWBRxLB7wJH9fM8mtuLwDAjDPlvLzGbeb0WbD0zmmkEzqVPZb4y4uaInMWsq+zyP0nx3c4HCgAA"
}

logcat:

com.jolo.push4_0.net.response.GetAdSdkConfigResp@274e153fjava.net.SocketTimeoutException
12-27 11:06:06.121 10462-11341/com.jolo.push4_0 W/System.err:     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
12-27 11:06:06.121 10462-11341/com.jolo.push4_0 W/System.err:     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
12-27 11:06:06.121 10462-11341/com.jolo.push4_0 W/System.err:     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
12-27 11:06:06.121 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okio.Okio$2.read(Okio.java:113)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okio.RealBufferedSource.indexOf(RealBufferedSource.java:147)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:94)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:179)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:628)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:388)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:199)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.jolo.push4_0.net.OkHttpWrapper.postMethod(OkHttpWrapper.java:76)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.jolo.push4_0.net.BaseNetUtil$NetTask.doInBackground(BaseNetUtil.java:72)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at com.jolo.push4_0.net.BaseNetUtil$NetTask.doInBackground(BaseNetUtil.java:64)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-27 11:06:06.131 10462-11341/com.jolo.push4_0 W/System.err:     at java.lang.Thread.run(Thread.java:818)

如果您能给我一些建议,我将不胜感激。

来自https://stackoverflow.com/a/24614909/7267105

客户端无法解决该错误,因为它是与网络相关的问题。但是,您可以做的是重试连接几次。这可能会作为解决方法,直到解决实际问题为止。

for (int retries = 0; retries < 3; retries++) {
    try {
        final HttpClient client = createHttpClientWithDefaultSocketFactory(null, null);
        final HttpResponse response = client.execute(get);
        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != 200) {
            throw new IllegalStateException("GET Request on '" + get.getURI().toString() + "' resulted in " + statusCode);
        } else {                
            return response.getEntity();
        }
    } catch (final java.net.SocketTimeoutException e) {
        // connection timed out...let's try again                
    }
}

相关内容

  • 没有找到相关文章

最新更新