【问题标题】:Android: How can i set a timeout for SSL sockets for a blocking read/write using the ThreadSafeClientConnectionMana­ger?Android:如何使用 ThreadSafeClientConnectionManager 为 SSL 套接字设置阻塞读/写超时?
【发布时间】:2012-03-01 11:12:30
【问题描述】:

如何使用 ThreadSafeClientConnectionManaget 为 SSL 套接字设置阻塞读/写超时?我发现在读取或写入 SSL 套接字时失去网络连接会导致 Android OS 2.2 和 2.3 设备上的 15 分钟超时。

我在 HttpClient 上设置了以下超时:

    mParams = new BasicHttpParams();
    HttpProtocolParams.setVersion(mParams, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(mParams, "UTF-8");
    HttpProtocolParams.setUserAgent(mParams, USER_AGENT);

    HttpConnectionParams.setConnectionTimeout(mParams, TIME_OUT);
    HttpConnectionParams.setSoTimeout(mParams, TIME_OUT);

    ConnManagerParams.setTimeout(mParams, TIME_OUT);

    final SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme(HTTP_SCHEME, PlainSocketFactory.getSocketFactory(), 80));
    registry.register(new Scheme(HTTPS_SCHEME, SSLSocketFactory.getSocketFactory(), 443));

    final ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(mParams, registry);

    mClient = new DefaultHttpClient(manager, mParams);

然后我使用客户端对文件实体执行 http put 请求。如果我在上传过程中打开飞行模式,等待 15-30 秒,然后关闭飞行模式,套接字将卡在读取或写入状态,并且不会超时 15 分钟。

【问题讨论】:

    标签: java android


    【解决方案1】:

    不要偏离您非常合理的问题,但博客文章 Android's HTTP Clients 建议使用 HttpURLConnection 进行新开发。您是否考虑过切换 API?

    【讨论】:

    • 由于我们需要支持 Froyo 并且该版本的 HttpURLConnection 存在问题,我们不会切换 API。此外,我们有大量围绕 Apache 客户端的自定义代码,在 ICS 之前在 HttpURLConnection 中没有等效代码。不过还是谢谢你的建议。
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2015-04-15
    • 2012-11-13
    • 2010-09-22
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多