Apache Commons FTPClient.storeFile()错误引起:java.net.SocketException:连接重置

问题描述 投票:0回答:4

我做了一个新的编辑(2),似乎问题是图像实际上是存储的,但有时需要一段时间来存储它们(很多分钟,通常需要大约一秒钟)。我很好奇,如果它可能是我的服务器?我觉得奇怪的是,当我运行这个时没有问题(很多个月以前,我一直在研究另一个项目),所以我很好奇为什么现在有问题,所以服务器端可能有意义,但这是一个大问题现在如果......


我有一个连接到我的服务器并将文件/图像保存到服务器的应用程序。我最初保存了计算机上的文件,然后上传了这些文件;但是,因为我不想保存文件,所以我选择使用ByteArrayOutputStream。

出于某种原因,在我的文件上传期间,我的JavaFX应用程序将随机挂起。

单击x时,它会询问我是否要尝试“还原”应用程序,当我这样做时会抛出错误的堆栈跟踪。

引起:java.net.SocketException:连接重置

我在这里搜索了多个帖子和谷歌,没有任何帮助我。

到目前为止我已经尝试过了。

  1. “ftp.enterLocalPassiveMode(已启用)。
  2. 更改超时,例如连接和数据。
  3. Java 7中的一些错误,您必须运行命令行脚本才能修复(我正在运行Java 8 Update 71)。
  4. 一些exec命令似乎只对FTPSClient有用,而不是FTPClient

还有一些东西告诉我增加缓冲区大小,用户做了“setBufferSize(1024 * 1024),而默认情况下,对我来说,是0 ...仍然没有改变任何东西。

到目前为止,没有任何工作,奇怪的是它将上传随机数量的图像,然后挂起。我一直注意到我尝试上传这些图片的次数越多,他们看起来就越多,上传之前就挂了,但有一次它挂在第一张图片上,所以我不知道......

我运行了Netbeans Profiler,我不确定是否在“线程转储”中显示了oridinary中的任何内容,但如果需要,我可以发布。


我的代码是否重要。

   for(Data f: plan.getData())
        {

                    BufferedImage b  = image;  //reduced code here
                    os =  new ByteArrayOutputStream();

                    ImageIO.write(b, "PNG", os);
                    is = new ByteArrayInputStream(os.toByteArray());


                    ftp.storeFile(f.getName(), is); // Application hangs/ Connection Resets here after x amount of stores.

       }

FTP连接:

    {
         ftp.setDefaultTimeout(100000000);
      ftp.connect();
      ftp.login();

      // use local passive mode to pass firewall
      ftp.enterLocalPassiveMode();

        //System.out.print(ftp.getReplyString()); 


        //keeps connection alive (doesn't really work)

//Tried to set as many timeouts as I could as I read some of these could be the issue too...
        ftp.setKeepAlive(true);
         ftp.setControlKeepAliveTimeout(100000);
         ftp.setControlKeepAliveReplyTimeout(10000);
         ftp.setConnectTimeout(100000);
         ftp.setDataTimeout(300);
         ftp.setSoTimeout(100000);



        //sets buffer size to allow more files to be transferred.
        System.out.println("Buffer Size:" + ftp.getBufferSize());
        ftp.setBufferSize(1024 * 1024);
        System.out.println("Buffer Size:" + ftp.getBufferSize()); 


    }

此外,为了它的价值,在关闭程序后,我进入我的控制台,用红色字母表示该行

Java结果:-805306369

我在谷歌上找不到这个结果编号,也不知道我们是否有特定的地方寻找结果。

如果有人有任何建议我会很感激...

这真的很困扰我,特别是因为我以前没有任何问题存储文件与图像....

任何帮助表示赞赏谢谢!


堆栈跟踪:

    SEVERE: null
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:209)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.io.BufferedReader.read(BufferedReader.java:182)
    at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:314)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294)
    at org.apache.commons.net.ftp.FTP.getReply(FTP.java:694)
    at org.apache.commons.net.ftp.FTPClient.completePendingCommand(FTPClient.java:1830)
    at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:689)
    at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:639)
    at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1996)

编辑:我试图改变只是读取文件,这是我第一次做的,我得到同样的错误。

我把代码改了一点,把它放在不同的地方,但一切都基本相同......

除了很多时候,这两个版本之间的唯一变化就是我切换了计算机...这是一个JavaFX应用程序,所以我不认为我在旧计算机上对Tomcat所做的更改很重要,但我'我要看看我的旧电脑是否会导致这个问题....


编辑2:我检查了旧计算机,它使用相同版本的Apache-Commons-Net(3.4),但我无法在之前的状态下运行应用程序,所以我会看看是否可以修复它,或尝试其他选择。

为了它的价值我决定不点击“x”退出,或者完全触摸应用程序,只是看了输出。

通常,它会将一些文件存储到服务器,然后崩溃,但后来我意识到我的应用程序“挂起”整个时间,如果我实际上等了一会儿,它将存储其他图像/文件。

所以现在我很困惑这里的问题是什么。这是我的服务器有问题,还是我的问题?我认为这更像是服务器的错误,如果图像/内容有时被快速保存(当我做一个秒表时每张图像约1秒),但有时需要几分钟或更长时间。我将尝试获取完整的StopWatch堆栈跟踪以查看发生了什么。

似乎做一个“thread.sleep(x)”或ftp断开连接,然后连接有时会帮助更容易地移动文件的存储。不确定这只是运气,还是以某种方式帮助......

java sockets ftp connection apache-commons-net
4个回答
© www.soinside.com 2019 - 2024. All rights reserved.