1

我正在编写一个文件上传应用程序。我可以使用 asyn 方法连接到服务器并上传文件(apache http)。
服务器已将连接数限制设置为 100。如果连接持续 60 秒,我想设置连接超时以断开连接。

流程如下:
(1) Android 客户端建立与服务器的连接。(开始计数60s)
(2)如果60s后连接仍然存在,则断开与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 秒来断开活动连接呢?另外,是否可以知道连接何时建立?

4

2 回答 2

2

您是否尝试过设置套接字超时?它与连接超时不同。

params.setParameter( HttpConnectionParams.SO_TIMEOUT, 60000 );

whereparams是 的一个实例BasicHttpParams,它被传递到 的构造函数中DefaultHttpClient

于 2012-04-27T16:14:18.963 回答
1

在您的活动中使用处理程序来完成这项工作。下面的代码会给你一个想法:

 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)。

于 2012-04-27T17:03:05.817 回答