gpt4 book ai didi

java - Apache HttpClient 4.0 无法在 Android 上为套接字超时

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:45:54 27 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,它需要使用 HttpClient 才能将文件从 Android 设备上传到 Web 服务器。我上传的文件最大可达 1 Gb,因此如果设备在上传过程中断开连接,可能会发生超时。奇怪的是我给socket设置的timeout好像没有任何作用。每当我失去连接而不是引发 SocketTimeoutException 时,应用程序就会挂起。

我尝试使用:

HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT);

但这只适用于连接超时,不适用于套接字超时。我也试过:

HttpParams p = httpclient.getParams();
p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);

我知道连接超时有效的原因是,我会在执行后得到连接超时的异常

httpclient.execute(httppost);

应用程序似乎在上传过程中连接丢失时挂起,但在应用程序成功连接到服务器之后。

为了测试我的应用程序,我在不同时间禁用了网络以查看应用程序的 react 。如果我在发送请求之前禁用网络,我会收到一个连接错误,我的应用程序可以正常处理,但如果我在上传期间禁用它,应用程序就会挂起。当然,我正在通过 AsyncTasks 执行所有这些请求,因此主 UI 线程不会崩溃。我只是想知道是否有任何其他方法可以确保套接字在未接收到任何数据时超时,或者我是否遗漏了任何内容。我读过很多博客和帖子,但其中大多数只是建议使用 SO_TIMEOUT,这对我不起作用。

sotimeout not working in a multipart http post on android 2.1

最佳答案

您要创建自己的 ClientConnectionManager 吗?看看 source对于 AndroidHttpClient.newInstance() .

他们创建一个新的 BasicHttpParams 对象并将其传递给 ThreadSafeClientConnectionManager 和 DefaultHttpClient 的构造函数。除了在构造函数中,我没有看到在 ClientConnectionManager 上设置参数的方法。

关于java - Apache HttpClient 4.0 无法在 Android 上为套接字超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com