2 txxxfish txxxfish 于 2014.12.19 09:52 提问

关于httpURLConnnection 是否可以阻塞式的获取数据

用httpconnection做获取数据的操作,在建立了connection实体后,直接调用getResponseCode(),然后直接返回流读写异常。我设置了5秒超时,但是根本就没有执行5秒。
类似于httpClient的话,他的execute可以阻塞,我设置5秒超时,他会等5秒,没获取到数据然后抛异常。我想知道httpconnection能否类似的做到。貌似connect()方法是会阻塞,但是后面加上getResponseCode()或者getInputStream()又会直接抛异常,设了超时根本就不等待了。不知道有大神能帮下不。

2个回答

AXingSurfer
AXingSurfer   2014.12.19 10:03

报错信息都贴出来看看吧。

txxxfish
txxxfish   2014.12.24 15:35

不是错误 比如这段代码
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setConnectTimeout(5000);

        conn.setRequestMethod("GET");
        conn.connect();
        int code = conn.getResponseCode();

        在设置了5000ms的超时后,程序在执行 conn.connect(); 后没有阻塞,继续往下执行,在 int code = conn.getResponseCode(); 由于调用 getInputStream(),而抛出IO异常。没等5秒。

        HttpGet getMethod = new HttpGet(url);   
     HttpClient httpClient = getHttpClient();
        HttpResponse response = httpClient.execute(getMethod);
        if(response.getStatusLine().getStatusCode() == 200)

        上面的代码,我给httpclient设置了5000毫秒的超时,程序执行到 httpClient.execute(getMethod) ,如果没有活得数据,会阻塞式的一直获取,直到5秒秒超时,抛出超时异常。

        我希望的是httpConnection 可以有类似的方法,会阻塞式的获取数据,能体现出有5秒的等待。
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!