2016-11-03 1 views
0
Socket s; 
    try { 
     s = new Socket(InetAddress.getByName("stackoverflow.com"), 80); 

     PrintWriter pw = new PrintWriter(s.getOutputStream()); 
     pw.println("GET/HTTP/1.1"); 
     pw.println("Host: stackoverflow.com"); 
     pw.println(); 
     pw.flush(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); 
     String t; 

     while((t = br.readLine()) != null) 
      System.out.println(t); 

     br.close(); 

    } catch (IOException ex) { 
     Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
    } 

While 루프의 문제는 생각하지만 모든 데이터를 가져온 후 중지하는 방법을 알지 못합니다.BufferedReader While 루프에서 Java 프로그램이 멈 춥니 다.

+2

는 다음 바이트가 다음 소켓을 닫습니다 읽어 보시기 바랍니다. 연결이 활성 상태로 유지되고 있으며 다른 요청을 보내길 기다리고 있습니다. 대신 HttpClient를 사용하여이 작업을 수행하십시오. http://hc.apache.org/httpcomponents-client-ga/ – BretC

답변

0

이 질문에 대한 답을 찾았습니다. https://stackoverflow.com/a/1577833/4028581

"chunked"콘텐츠 인코딩에 문제가 있습니다. 이 값은 응답이 시작될 때 웹 서버에서 요청한 컨텐트 길이를 알 수 없을 때 사용됩니다. 기본적으로 전송되는 바이트 수, CRLF, 바이트 순으로 구성됩니다. 응답의 끝은 사용자가보고있는 정확한 순서로 표시됩니다. 이제 웹 서버가 다음 요청을 기다리고 있습니다 (이를 "요청 파이프 라이닝"이라고도 함).

1를 사용하여 HTTP 버전 1.0 :

당신은 몇 가지 가능성이있다. 이렇게하면 응답이 완전히 전송되었을 때 웹 서버가 자동으로 연결을 닫습니다.

2 요청을 보낼 때 "연결 : 닫기"헤더를 지정하십시오. 이렇게하면 연결이 닫힙니다.

3 내용을 "청크"로 구문 분석하고 응답을 마치 지금 마치 응답으로 처리합니다. 으로

: 봄베

당신은 응답 헤더를 읽고 내용 길이를 찾아야합니다
관련 문제