我究竟做错了什么?我的超时不起作用

时间:2018-12-28 08:47:40

标签: android post timeout httpsurlconnection

我将Wi-Fi IP更改为无法连接。 我希望在经过5秒后执行其他操作,但要等待20秒左右。

URL url = null;
HttpsURLConnection conn = null;

try {
    url = new URL("MY_URL");
    conn = (HttpsURLConnection) url.openConnection();
    conn.setReadTimeout(3000);
    conn.setConnectTimeout(5000);
    conn.setRequestMethod("POST");
    conn.setDoInput(true);
    conn.setDoOutput(true);

    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("msg", String.valueOf(jsonArray)));

    OutputStream os = conn.getOutputStream();
    BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));
    writer.write(getQuery(params));
    writer.flush();
    writer.close();
    conn.connect();

    BufferedReader reader = new BufferedReader(new InputStreamReader((InputStream) conn.getContent(), "UTF-8"));

    String response = reader.readLine();

1 个答案:

答案 0 :(得分:0)

来自documentation

  

警告:如果主机名解析为多个IP地址,则Android的HttpURLConnection的默认实现将按RFC 3484的顺序尝试每个。如果连接到这些地址中的每一个失败,则在连接尝试引发异常之前将经历多个超时。同时支持IPv6和IPv4的主机名始终至少具有2个IP地址。

这意味着,如果主机具有“ n”个IP地址,则将花费n*milliseconds时间而不是您milliseconds来捍卫。