У меня есть код, который я использую для чтения текстового файла с URL-адреса. Однако он проявляет странное поведение. В первый раз, когда я запускаю код, я получаю сброс соединения путем одноранговой ошибки, и весь код не запускается.HttpURLConnection reset by peer при первом запуске ... работает на немедленном повторении
Если я затем повторно запускаю код сразу после того, как код работает нормально, файл загружается и операции выполняются по назначению. Вот код:
public static String GetMasterFileStream(String Operation) throws Exception {
System.setProperty("http.keepAlive", "false");
StringBuilder sb = new StringBuilder();
BufferedWriter bw = null;
String inputLine = null;
System.out.println("Server manifest checks starting");
URL url = new URL(CrewAdviceMasterControlURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("connection", "close");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
File outfile = new File(LocalManifestFile);
String return_string = "";
String [] ManifestLines;
switch (Operation) {
case "PreCheck":
inputLine = in.readLine();
sb.append(inputLine.toString());
return_string = String.valueOf(sb);
break;
case "UpdateMaster":
case "CreateMaster":
if(!outfile .exists()){
outfile .createNewFile();
}
FileWriter fileWriter = new FileWriter(outfile);
bw = new BufferedWriter(fileWriter);
int endlinecount =0;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine); //for producing test output
sb.append(inputLine.toString());
sb.append("\n");
if (endlinecount > 0)
{
bw.write("\r\n");
}
bw.write(String.valueOf(inputLine));
endlinecount++;
}
bw.close();
System.out.println("Manifest file successfully written...");
return_string = String.valueOf(sb);
ManifestLines = return_string.split("\n");
return_string = ManifestLines[0];
//text = text.replace("\n", "").replace("\r", "");
break;
}
in.close();
return return_string;
}
Вот журналы ошибок:
W/System.err: java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
D/dalvikvm: GC_FOR_ALLOC freed 6333K, 33% free 18277K/26880K, paused 50ms, total 50ms
W/System.err: at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:545)
W/System.err: at libcore.io.IoBridge.recvfrom(IoBridge.java:509)
W/System.err: at java.net.PlainSocketImpl.read(PlainSocketImpl.java:489)
W/System.err: at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
W/System.err: at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
W/System.err: at java.io.InputStream.read(InputStream.java:162)
W/System.err: at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
W/System.err: at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
W/System.err: at com.android.okhttp.internal.Util.readAsciiLine(Util.java:316)
W/System.err: at com.android.okhttp.internal.http.RawHeaders.fromBytes(RawHeaders.java:320)
W/System.err: at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:147)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:795)
W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:347)
W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
W/System.err: at com.cm3.danielhutchinson.lialpatools.CrewAdviceFunctions.GetMasterFileStream(CrewAdviceFunctions.java:60)
W/System.err: at com.cm3.danielhutchinson.lialpatools.CrewAdviceFunctions.PreCheck(CrewAdviceFunctions.java:179)
W/System.err: at com.cm3.danielhutchinson.lialpatools.CrewAdviceActivity$AdviceController.doInBackground(CrewAdviceActivity.java:210)
W/System.err: at com.cm3.danielhutchinson.lialpatools.CrewAdviceActivity$AdviceController.doInBackground(CrewAdviceActivity.java:176)
W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err: at java.lang.Thread.run(Thread.java:841)
W/System.err: Caused by: libcore.io.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)
W/System.err: at libcore.io.Posix.recvfromBytes(Native Method)
W/System.err: at libcore.io.Posix.recvfrom(Posix.java:141)
W/System.err: at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164)
W/System.err: at libcore.io.IoBridge.recvfrom(IoBridge.java:506)
W/System.err: ... 23 more
'con.setRequestProperty ("соединение", "close");'. Зачем? Удалите эту строку. – greenapps
'PreCheck'. Вы ничего не сказали об этом. Почему нет? Это связано? – greenapps
okhttp в вашем logcat. Как это возможно с UrlConnection? – greenapps