2

AsyncTask 안에 서버와 연결을 만들고 있습니다. HttpURLConnection을 사용하고 있습니다. 나는 url에있는 자료를 보내고있다. 아래는 AsyncTask의 doInBackground() 메소드 코드입니다. 서버로 데이터를 보내려고했지만 문제가 해결되지 않았습니다. 나는 또한 Connection close header를 설정하려고 시도했다. 그러나 문제는 여전히 지속됩니다.안드로이드 : HttpURLConnection 던지고 EOFException

protected String doInBackground(String... url) { 
    JSONObject body = new JSONObject(); 
    try { 
     body.put("body",""); 
    } catch (JSONException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    mUploadChunkURL = url[0]; 
    System.out.println("length: " + mDataLength + " String length: " + String.valueOf(mDataLength)); 
    URL myurl; 
    HttpsURLConnection con = null; 
    while (numberOfTries < MAX_RETRIES) { 
     try { 
      myurl = new URL(mUploadChunkURL); 
      con = (HttpsURLConnection)myurl.openConnection(); 
      con.setRequestMethod("POST"); 
      con.setConnectTimeout(1000*60*2); 
      con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
      con.setDoOutput(true); 
      con.setDoInput(true); 

      if (Build.VERSION.SDK != null 
        && Build.VERSION.SDK_INT > 13) { 
       System.out.println("connection close"); 
       con.setRequestProperty("Connection", "close"); 
        } 

      DataOutputStream output = new DataOutputStream(con.getOutputStream()); 
      output.writeBytes(body.toString()); 
      output.close(); 

      System.out.println("Resp Code: "+con.getResponseCode()); 
      System.out.println("Resp Message: "+ con.getResponseMessage()); 

      Log.e("64","Resp Message: "+inputLine.toString()); 

     } catch (IOException e) { 
      Log.e("70", "IO exception: " + e.toString()); 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 

      if (con != null) 
       con.disconnect(); 
     } 

     numberOfTries++; 
    } 

    return null; 
} 

EOFException이 표시됩니다. 나는이 줄에서이 예외를 얻고있다 "System.out.println ("Resp Code : "+ con.getResponseCode());". 아래는 오류 로그입니다.

05-23 15:46:25.281: W/System.err(16688): java.io.EOFException 
05-23 15:46:25.281: W/System.err(16688): at libcore.io.Streams.readAsciiLine(Streams.java:203) 
05-23 15:46:25.281: W/System.err(16688): at libcore.net.http.HttpEngine.readHeaders(HttpEngine.java:608) 
05-23 15:46:25.281: W/System.err(16688): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:561) 
05-23 15:46:25.281: W/System.err(16688): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813) 
05-23 15:46:25.281: W/System.err(16688): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274) 
05-23 15:46:25.281: W/System.err(16688): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486) 
05-23 15:46:25.281: W/System.err(16688): at libcore.net.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:134) 
05-23 15:46:25.281: W/System.err(16688): at com.utility.UploadFileChunk.doInBackground(UploadFileChunk.java:71) 
05-23 15:46:25.296: W/System.err(16688): at com.utility.UploadFileChunk.doInBackground(UploadFileChunk.java:1) 
05-23 15:46:25.296: W/System.err(16688): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
05-23 15:46:25.296: W/System.err(16688): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
05-23 15:46:25.296: W/System.err(16688): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
05-23 15:46:25.296: W/System.err(16688): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
05-23 15:46:25.296: W/System.err(16688): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
05-23 15:46:25.296: W/System.err(16688): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
05-23 15:46:25.296: W/System.err(16688): at java.lang.Thread.run(Thread.java:856) 

도와주세요.

+0

매니페스트에 인터넷 사용 권한을 추가하셨습니까? – Selvin

+0

인터넷 권한은 괜찮습니다. –

+0

2 개의 println 뒤에'output.close();를 움직여보십시오. 파일 끝 예외는 con.getresponsecode가 이미 끝에 도달 한 것을 읽으려고한다는 것을 의미합니다. 이것이 실제로 btw를 도울 것인지 확실하지 않아서 원인이 무엇인지 추측 할 수 있습니다. – SvenT23

답변

2

실제로 URL은 제대로 형성되지 않았습니다. 그래서 나는 EOFException을 얻고 있었다. URL에 Base64 데이터를 보내고 데이터를 Base64로 변환하는 동안 NO_WRAP 플래그를 지정하지 않았습니다. Base64 데이터가 한 줄로 늘어나지 않았 으리라는 결론을 얻었습니다.

관련 문제