Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

안드로이드 (android) 네트워크 프로그램 사용시 Connection Timeout 체크하기

 

개발환경 : JDK 1.5, eclipse-galileo, google API 7(android 2.1), 우분투 9.10, window XP

 

안드로이드로 웹서비스를 통해 데이터를 받아올 때 주로 쓰는 클래스가

org.apache.http.client.HttpClient 이다. 자기가 서버를 구현해서 데이터를 받든

포털사이트에서 제공하는 API 서비스를 받든 이걸 이용해서 접근하고

전송받은 데이터를 가공해 사용하는데 간단한 예제들에는 connection

문제가 생기면 거의 30 초 이상 기다려야 exception 이 떨어진다. 만약

피치 못한 사정으로 서버가 죽던지 아니면 네트웍 상황이 않좋아서 데이터를

못하져 오게 되었는데 30 초까지 기다려줄 사용자가 어디 있겠는가?

바로 어플은 패기 처분 될것이 뻔하다.

그래서 접속후 일정시간안에 데이터를 가져오지 못한다면 exception

떨어뜨릴수 있도록 시간 제한을 옵션으로 해둬야한다.

 

이것저것 찾아보다보니 대부분 HTTP 프로토콜을 이용한 데이터 전송이나

받기는 org.apache.commons.httpclient 클래스를 이용하는 예제 였다. 하지만

이것은 안드로이드 API 에 포함되어있지 않다.

 

한참을 찾다 아래 예제를 하나 찾았는데 HttpParams setParameter

파라미터로 http.connection.timeout 과 제한 하고자 하는 시간을 넣는다.

1000 1초이므로 5초 동안 응답이 없으면 UnknownHostException 을 던지게

된다.


HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter("http.protocol.expect-continue", false);
httpclient.getParams().setParameter("http.connection.timeout", 5000);
httpclient.getParams().setParameter("http.socket.timeout", 5000);

또 다른 방법은 HttpConnectionParams 클래스에서 지원하는 setConnectionTimeout

setSoTimeout 를 이용해 timeout 을 설정하는 것이다
HttpClient httpclient = new DefaultHttpClient();
HttpParams params = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 5000);
반응형
Posted by 녹두장군

댓글을 달아 주세요

  1. Gabriel. 2012.01.20 12:06  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사 드립니다.. ^^

  2. 태훈 2012.05.08 20:02  댓글주소  수정/삭제  댓글쓰기

    참조할께요 ^^

  3. Favicon of https://insanelysimple.tistory.com 무대포개발자 2012.07.24 22:08 신고  댓글주소  수정/삭제  댓글쓰기

    좋은 자료네요. 퍼갈게요~

  4. 안드레이드 2012.12.18 21:42  댓글주소  수정/삭제  댓글쓰기

    항상 개발하다 문제가 생겨 검색.. 검색.. 하다 최종 종착지로 되네요..
    공유해 주셔서 .. 감사합니다.

  5. Favicon of http://twitter.com/wlsk1103 배지나 2013.01.07 08:31  댓글주소  수정/삭제  댓글쓰기

    httpclient.getParams().setParameter("http.protocol.expect-continue", false); 이건 무슨 설정인가요... 아래 두개는 타임아웃이고 위에는... 뭐죠?;;