我正在编写一个文件上传应用程序。我可以连接到服务器并使用 asyn 方法上传文件(apache http)。
服务器已将连接数限制设置为 100。我想设置连接超时以断开连接,如果连接持续 60 秒。
以下是流程:
(1) 安卓客户端建立与服务器的连接。(60 秒的开始计数)
(2)如果连接在60秒后仍然处于活动状态,则断开与Android客户端的连接
我知道将超时设置为HttpParams不起作用。我不知道该怎么做。
有人知道如何做到这一点吗?欢迎任何解决方案或建议。谢谢!
以下是如何上传文件的代码片段:
try
{
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 60000);
HttpConnectionParams.setSoTimeout(httpParameters, 60000);
HttpClient client = new DefaultHttpClient(httpParameters);
...
ByteArrayBody bab = new ByteArrayBody(byteArray, "photo.jpg");
entity.addPart("photo", bab);
httpPost.setEntity(entity);
startTime = System.currentTimeMillis();
//ClientConnectionRequest connRequest = new ManagedClientConnection();
//httpPost.setConnectionRequest((ClientConnectionRequest) connRequest.getConnection(3000, TimeUnit.MILLISECONDS));
HttpResponse response = client.execute(httpPost, localContext);
Handler mHandler = new Handler();
BufferedReader reader = new BufferedReader(new InputStreamReader( response.getEntity().getContent(), "UTF-8"));
String result = "";
String tmp = "";
while ((tmp = reader.readLine()) != null)
{
result += tmp;
}
reader.close();
return result;
} catch (Exception e) {
Log.e(TAG, "error time = " + (System.currentTimeMillis() - startTime));
Log.e("httpUploadHandler", "Some error came up");
Log.e("httpUploadHandler", e.toString());
}
我可以通过调用以下命令断开连接:
client.getConnectionManager().shutdown();
但是我怎么能数 60 多岁才能断开活动连接呢?另外,是否可以知道连接何时建立?
您是否尝试过设置套接字超时?它与连接超时不同。
params.setParameter( HttpConnectionParams.SO_TIMEOUT, 60000 );
其中params
是BasicHttpParams
的实例,它被传递到DefaultHttpClient
的构造函数中。
在活动中使用处理程序来完成这项工作。下面的代码会给你一个想法:
private ShutDownHandler mRedrawHandler = new ShutDownHandler();
class ShutDownHandler extends Handler {
@Override
public void handleMessage(Message msg) {
client.getConnectionManager().shutdown();
}
public void doJob(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
};
从主线程调用 mRedrawHandler.doJob(60000)。