2012-05-22 3 views
7

HTTP 요청을하기 위해 HttpURLConnection 클래스를 사용하고 있습니다. 내 코드는 내가 InputStream 객체를 검색하면 내가 데이터에 대한 몇 가지 처리를 할 this-HttpURLConnection.getInputStream() blocks

while(true){ 
    try{ 
     connection=(HttpURLConnection)url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setConnectTimeout(2*1000); 
     InputStream in=connection.getInputStream(); 
    } 
    catch(SocketTimeOutException e){} 
    catch(IOException e){} 
} 

같은 것을 보인다. 내 문제는 만약 내가 충분히 오래 프로그램을 실행 시키면, getInputStream 블록에 대한 호출이 결코 끝나지 않는다는 것이다.

누락 된 부분이 있습니까? 모든 포인터 또는 도움을 크게 주시면 감사하겠습니다. 감사.

+4

'while (true)'루프에서 이런 종류의 것을'catch (SocketTimeOutException e) {}'하지 마십시오. 프로그램을 정상적으로 디버깅하거나 중지하는 것이 매우 어려울 것입니다. – artbristol

+2

@artbristol 당신이 무엇을 말하려고하는지 ... 그것은 우리의 생산 코드에서입니다 :) –

+2

@artbristol은 당신이'connection.setDoOutput (true)'를 주석 처리하려고했던 것과 별개로 당신이 전화를 할 것을 기대하고 있습니다. 'connection.getOutputStream()'및 HTTP 본문에 무언가를 작성하십시오 –

답변

6

연결에 대한 읽기 시간을 설정하십시오. 또한 완료되면 finally 블록의 스트림을 닫습니다.

+0

감사. 이것은 많은 도움이됩니다. – Sandman

+0

고맙습니다. !!!! – jaisonDavis

1

사용하지 않는 연결은 닫아야합니다. 예를 들면 다음과 같습니다.

connection = (HttpURLConnection) url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.setDoOutput(true); 
connection.setReadTimeout(2*1000); 
connection.connect(); 
reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
stringBuilder = new StringBuilder(); 
String line = null; 
while ((line = reader.readLine()) != null) 
{ 
stringBuilder.append(line + "\n"); 
} 
String result = stringBuilder.toString(); 
reader.close(); 
+0

답장을 보내 주셔서 감사합니다. 연결에서 읽기 시간을 설정하면 문제가 해결 된 것 같습니다! 도움 주셔서 대단히 감사합니다. – Sandman

+0

setDoOutput (true)로 GET이 제대로 작동하지 않습니다. – zgulser