2014-09-22 3 views
5

java.net.SocketInputStream.socketRead0 (네이티브 메서드)에서 멈춤. 아래의 스레드 덤프를 보면 3 시간 동안이 상태에 있습니다.java.net.SocketInputStream.socketRead0 (네이티브 메서드)에서 멈춤.

Thread-0" prio=10 tid=0x00007facd02a5000 nid=0x309 runnable [0x00007facd4a43000] 
java.lang.Thread.State: RUNNABLE 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:150) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442) 
    at sun.security.ssl.InputRecord.read(InputRecord.java:480) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927) 
    - locked <0x00000000e34a0428> (a java.lang.Object) 
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884) 
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102) 
    - locked <0x00000000e34a0590> (a sun.security.ssl.AppInputStream) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    - locked <0x00000000e30408b8> (a java.io.BufferedInputStream) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:633) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322) 
    - locked <0x00000000e3031d00> (a sun.net.www.protocol.https.DelegateHttpsURLConnection) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
    - locked <0x00000000e3031c80> (a sun.net.www.protocol.https.HttpsURLConnectionImpl) 

그리고 연결 시간 제한 및 읽기 제한 시간을 URLConnection에 설정했습니다. 아래의 코드 스 니펫을 참조하십시오. 그래서 java.net.SocketInputStream.socketRead0에서 왜 멈출 지 모르겠다. 나는이 문제가 때때로있다. 어떤 제안이라도 감사드립니다!

public String sendPost(String params) throws Throwable { 
PrintWriter out = null; 
String htmlContent = null; 
try 
{ 
    StringBuffer strBuffer = new StringBuffer(); 
    URL url = new URL(this.webUrl); 
    URLConnection urlConnection = url.openConnection(); 
    urlConnection.setConnectTimeout(3000); 
    urlConnection.setReadTimeout(3000); 

    urlConnection.setRequestProperty("accept", "*/*"); 
    urlConnection.setRequestProperty("connection", "Keep-Alive"); 
    urlConnection.setRequestProperty("user-agent", "***"); 

    urlConnection.setDoOutput(true); 
    urlConnection.setDoInput(true); 

    out = new PrintWriter(urlConnection.getOutputStream()); 
    out.print(params); 
    out.flush(); 

    BufferedReader bufferdReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8")); 
    String readLine = null; 
     try { 
      while ((readLine = bufferdReader.readLine()) != null) { 
       strBuffer.append(readLine); 
      } 
     } catch (Throwable e) { 
      return htmlContent; 
     } 
     htmlContent = strBuffer.toString(); 
     bufferdReader.close(); 
+0

'연결 : 계속 - alive' 기본값입니다. POST 매개 변수를 쓰지 않고 있습니다. 의도적입니까? – EJP

+0

감사합니다. @EJP, 코드 견적에 더 많은 코드를 붙여 넣습니다. 게시물 작업입니다. 다시 검토하십시오 .. – BurningDocker

+0

이것에 대한 업데이트가 있습니까? 나는 정확히 같은 문제가있다. – HamoriZ

답변

0

이것은 URLConnection의 버그라고 생각합니다. 소켓을 사용하고 시간 초과를 확인하십시오.