Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpURLConnection在第一次运行时由对等方重置…在立即重新运行时起作用_Java_Android_Httpurlconnection_Java Io - Fatal编程技术网

Java HttpURLConnection在第一次运行时由对等方重置…在立即重新运行时起作用

Java HttpURLConnection在第一次运行时由对等方重置…在立即重新运行时起作用,java,android,httpurlconnection,java-io,Java,Android,Httpurlconnection,Java Io,所以我有一些代码,我用它从url读取文本文件。然而,它却表现出一些奇怪的行为。第一次运行代码时,我收到了由对等错误重置的连接,并且所有代码都没有运行 如果在代码正常运行后立即重新运行代码,则文件将被下载,操作将按预期执行。 代码如下: public static String GetMasterFileStream(String Operation) throws Exception { System.setProperty("http.keepAlive", "false");

所以我有一些代码,我用它从url读取文本文件。然而,它却表现出一些奇怪的行为。第一次运行代码时,我收到了由对等错误重置的连接,并且所有代码都没有运行

如果在代码正常运行后立即重新运行代码,则文件将被下载,操作将按预期执行。 代码如下:

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

我发现,在测试中,服务器在第一次尝试时50%的时间重置了连接,并且在立即重试时始终有效

当我以前测试过这段代码时,它从未发生过。进一步的研究使我相信,这可能是服务器端的一个小故障,但并不总是存在

我修复了这个问题,基本上是把代码放在一个while循环中,循环的键是“success flag”


如果代码抛出连接重置错误,则会重试连接。如果成功,则不重试,然后我放入一个重试计数器,在重试3次后,该计数器将退出循环并提醒用户服务器错误。到目前为止,第二次尝试的成功率始终为100%。

我发现,在测试中,服务器在第一次尝试时重置了50%的连接,并且在立即重试时始终有效

当我以前测试过这段代码时,它从未发生过。进一步的研究使我相信,这可能是服务器端的一个小故障,但并不总是存在

我修复了这个问题,基本上是把代码放在一个while循环中,循环的键是“success flag”


如果代码抛出连接重置错误,则会重试连接。如果成功,则不重试,然后我放入一个重试计数器,在重试3次后,该计数器将退出循环并提醒用户服务器错误。到目前为止,第二次尝试的成功率始终为100%。

'con.setRequestProperty(“连接”,“关闭”);'。为什么?拆下那条线,“预检查”。你什么也没说。为什么不呢?涉及吗?在你的日志中。UrlConnection怎么可能呢?@greenapps要回答您的问题,我在调用方法时会传递操作命令。@greenapps要回答您的问题,我在调用方法时会传递操作命令。Precheck是在特定情况下调用的。基本上,precheck读取文本文件的第一行并仅返回该行。该行包含一个时间戳。然后将该戳与本地存储的文件的时间戳进行比较。如果服务器标记大于本地标记,则我知道服务器的内容已更新。因此,我可以开始下载清单文件的其余部分,而清单文件反过来告诉本地更新哪个文件。'con.setRequestProperty(“connection”,“close”);'。为什么?拆下那条线,“预检查”。你什么也没说。为什么不呢?涉及吗?在你的日志中。UrlConnection怎么可能呢?@greenapps要回答您的问题,我在调用方法时会传递操作命令。@greenapps要回答您的问题,我在调用方法时会传递操作命令。Precheck是在特定情况下调用的。基本上,precheck读取文本文件的第一行并仅返回该行。该行包含一个时间戳。然后将该戳与本地存储的文件的时间戳进行比较。如果服务器标记大于本地标记,则我知道服务器的内容已更新。因此,我可以开始下载清单文件的其余部分,这反过来告诉本地更新哪个文件。