2016-01-16 3 views
0

Уважаемый всех, у меня есть проблема с моим кодом. Мой ftp-клиент иногда висит, когда он извлекает файл с помощью «ftpClient.retrieveFileStream()». Любая идея, что я могу сделать? Я использую apache commons FTP client v3.4.Apache FTPClient зависает во время retrieveFileStream

  • Я пробовал также с "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  

относительно Марк

ответ

0

Я тоже была эта проблема. Я изменил retrieveFileStream на retrieveFile. и он больше не висит там.