【问题标题】:Apache FTPClient hangs during the retrieveFileStreamApache FTPClient 在检索文件流期间挂起
【发布时间】:2016-01-16 18:59:13
【问题描述】:

亲爱的,我的代码有问题。我的 ftp 客户端在使用“ftpClient.retrieveFileStream()”检索文件时有时会挂起。知道我能做什么吗?我正在使用 apache commons FTP 客户端 v3.4。

  • 我也尝试使用“ftpClient.retrieveFile()”,但没有任何区别。
  • 设置连接和 scoket 超时没有帮助
  • 设置被动模式没有帮助
  • 增加缓冲区没有帮助

            ftpClient = new FTPClient();
            ftpClient.setBufferSize(1024 * 1024);
            ftpClient.setConnectTimeout(10000);              
            ftpClient.connect(serverAddress);
            ftpClient.login(userName,password);
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient.enterLocalPassiveMode();
            ftpClient.setSoTimeout(10000);
    
            log("retriving file " + remoteFilePath + "...");
            OutputStream output = new FileOutputStream(localFilePath);
            InputStream inputStream = ftpClient.retrieveFileStream(remoteFilePath); // here it is sometimes hanging.
            try {
                IOUtils.copy(inputStream, output);
                output.flush();
            } 
            finally {
                IOUtils.closeQuietly(output);
                IOUtils.closeQuietly(inputStream);
                ftpClient.completePendingCommand();
            }
    

我检索到的最后一条消息通常如下所示:

19:58:21.145 [main] INFO  FTPDAO: retrieving file /Modell/5250/Artikel/25777/lg_keh68bgh_1.jpg...
19:58:21.145 [main] INFO  Log4JFTPCommandListener - >> PASV
19:58:21.462 [main] INFO  Log4JFTPCommandListener - << 227 Entering Passive Mode (195,216,65,165,168,240)
19:58:21.476 [main] INFO  Log4JFTPCommandListener - >> RETR /Modell/5250/Artikel /25777/lg_keh68bgh_1.jpg
19:58:21.490 [main] INFO  Log4JFTPCommandListener - << 150 Connection accepted

当我用调试器挂起程序时,它看起来挂在

 java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) 
 java.net.SocketInputStream.socketRead(FileDescriptor, byte[], int, int, int) line: 116 
 java.net.SocketInputStream.read(byte[], int, int, int) line: 170   
 java.net.SocketInputStream.read(byte[], int, int) line: 141    

问候 标记

【问题讨论】:

    标签: java timeout ftp-client apache-commons-net


    【解决方案1】:

    我也有这个问题。我将retrieveFileStream 更改为retrieveFile。而且它不再挂在那里了。

    【讨论】:

    • 遗憾的是,在我们的用例中,这两种解决方案都挂起:-/
    • @user2122552 确定不是网络问题? FTP客户端有同样的问题吗?
    • 我尝试了retrieveFileStream 和retrieveFile,但两种解决方案都没有成功。我使用'wget -r protocol:user:pw@IP'手动下载了目录,并且成功完成。我不能使用带有 GUI 的客户端,因为只有服务器的 IP 被列入白名单
    猜你喜欢
    • 2012-03-31
    • 2013-08-04
    • 2015-01-16
    • 1970-01-01
    • 2012-05-18
    • 2016-01-25
    • 2011-05-06
    • 1970-01-01
    相关资源
    最近更新 更多