【问题标题】:java.net.SocketException: recvfrom failed: ECONNRESET from PhoneGap's FileTransferjava.net.SocketException:recvfrom 失败:来自 PhoneGap 的 FileTransfer 的 ECONNRESET
【发布时间】:2013-02-01 08:18:49
【问题描述】:

程序在执行以下函数时抛出异常:

    testDownloadFunc: function() {
    console.log("testDownload");
    var remoteFile = "http://192.168.55.177/MvcApplication6/Download/getFile";
    var localFileName = "Test01.properties";

    function fail(error) {
        console.log(error.code);
    }

    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
        fileSystem.root.getFile(localFileName, {create: true, exclusive: false}, function(fileEntry) {
            var localPath = fileEntry.fullPath;
            if (device.platform === "Android" && localPath.indexOf("file://") === 0) {
                localPath = localPath.substring(7);
            }
            var ft = new FileTransfer();
            ft.download(remoteFile,
                localPath, function(entry) {
                    console.log("download complete: " + entry.fullPath);
                }, fail);
        }, fail);
    }, fail);       
}

已抛出以下异常:02-01 16:01:16.920: 电子/文件传输(23147): {"target":"/storage/sdcard0/Test01.properties","source":"http://192.168.55.177/MvcApplication6/Download/getFile","http_status":200,"code":3} 02- 01 16:01:16.920: E/FileTransfer(23147): java.net.SocketException: recvfrom 失败:ECONNRESET(对等方重置连接)02-01 16:01:16.920:电子/文件传输(23147):在 libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:552) 02-01 16:01:16.920:电子/文件传输(23147):在 libcore.io.IoBridge.recvfrom(IoBridge.java:516) 02-01 16:01:16.920: 电子/文件传输(23147):在 java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) 02-01 16:01:16.920:电子/文件传输(23147):在 java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) 02-01 16:01:16.920:电子/文件传输(23147):在 java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) 02-01 16:01:16.920:电子/文件传输(23147):在 java.io.BufferedInputStream.read(BufferedInputStream.java:304) 02-01 16:01:16.920:电子/文件传输(23147):在 libcore.net.http.ChunkedInputStream.read(ChunkedInputStream.java:52) 02-01 16:01:16.920:电子/文件传输(23147):在 java.io.InputStream.read(InputStream.java:163) 02-01 16:01:16.920: 电子/文件传输(23147):在 org.apache.cordova.FileTransfer.download(FileTransfer.java:507) 02-01 16:01:16.920:电子/文件传输(23147):在 org.apache.cordova.FileTransfer.execute(FileTransfer.java:88) 02-01 16:01:16.920:电子/文件传输(23147):在 org.apache.cordova.api.PluginManager$1.run(PluginManager.java:231) 02-01 16:01:16.920:电子/文件传输(23147):在 java.lang.Thread.run(Thread.java:856) 02-01 16:01:16.920: E/FileTransfer(23147):引起:libcore.io.ErrnoException:recvfrom 失败:ECONNRESET(对等方重置连接)02-01 16:01:16.920: E/FileTransfer(23147): 在 libcore.io.Posix.recvfromBytes(Native 方法) 02-01 16:01:16.920: E/FileTransfer(23147): at libcore.io.Posix.recvfrom(Posix.java:131) 02-01 16:01:16.920: 电子/文件传输(23147):在 libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164) 02-01 16:01:16.920:电子/文件传输(23147):在 libcore.io.IoBridge.recvfrom(IoBridge.java:513) 02-01 16:01:16.920: E/FileTransfer(23147): ... 10 更多

问题的根本原因是什么以及如何解决? 我使用 PhoneGap 2.1 和 Android 4.1.2。

【问题讨论】:

    标签: android cordova socketexception


    【解决方案1】:

    我不确定,但这个问题出在 java IO 核心的某个地方,同时读取了太多 lines 文本,我通过将 JSON 代码的行数从 450 减少来解决了这个问题到 10 行。

    我想出了这个解决方案,因为我使用 java 做了同样的工作,并且在到达 BufferedReader.readLine() 方法时遇到了同样的问题。

    而且它也可能有助于以另一种方式读取文件,例如使用 byteBuffer 或其他方式读取它们。但在你的情况下(电话差距),我没有想法:D

    【讨论】:

      猜你喜欢
      • 2015-08-15
      • 2013-01-05
      • 2017-02-22
      • 2012-10-13
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多