2016-01-28 11 views
0

Installation du serveur filezilla et activation des paramètres FTP sur TLS dans Paramètres et démarrage du serveur. Grâce au client java eclipse, j'ai essayé de me connecter au serveur pour télécharger et télécharger le fichier en utilisant le code ci-dessous en utilisant la bibliothèque apache de commons-net.Téléchargement et téléchargement du fichier FTPSClient toujours taille 0 et exception

 FTPSClient ftpClient = new FTPSClient(false);  
     // Connect to host 
     ftpClient.connect(mServer, mPort); 
     int reply = ftpClient.getReplyCode(); 
     System.out.println("The reply code is "+reply); 
     if (FTPReply.isPositiveCompletion(reply)) { 

     // Login 
     if (ftpClient.login("******", "*******")) { 
      // Set protection buffer size 
      ftpClient.execPBSZ(0); 
      // Set data channel protection to private 
      ftpClient.execPROT("P"); 
      // Enter local passive mode 
      ftpClient.enterLocalPassiveMode(); 


      // Upload File using storeFile 
      File firstLocalFile = new File("e:/Test.txt"); 
      String firstRemoteFile = "hello.txt"; 
      InputStream is = new FileInputStream(firstLocalFile); 
      String result = getStringFromInputStream(is); 
      System.out.println(result); 

      Object output = ftpClient.storeFile(firstRemoteFile, is); 
      System.out.println(output); 
      is.close(); 

      // Download File using retrieveFile(String, OutputStream) 
      String remoteFile1 = "/settings.xml"; 
      File downloadFile1 = new File("e:/testOutput.xml"); 
      OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1)); 
      boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1); 
      outputStream1.close(); 

      if (success) { 
       System.out.println("File #1 has been downloaded successfully."); 
      } 




     // Logout 
     ftpClient.logout(); 

    // Disconnect 
     ftpClient.disconnect(); 

     } else { 
      System.out.println("FTP login failed"); 
     } 

     // Disconnect 
     ftpClient.disconnect(); 

     } else { 
     System.out.println("FTP connect to host failed"); 
     } 
    } catch (IOException ioe) { 
     System.out.println("FTP client received network error"); 
     ioe.printStackTrace(); 
    } catch (Exception nsae) { 
     System.out.println("FTP client could not use SSL algorithm"); 
     nsae.printStackTrace(); 
    } 

Il crée un hello.txt de fichier sur le serveur, mais la taille est de 0kb (taille du fichier source est de 10 kb) et a fini par l'erreur suivante. S'il vous plaît aidez-moi à résoudre ce

 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) 
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) 
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
at org.apache.commons.net.ftp.FTPSClient._openDataConnection_(FTPSClient.java:619) 
at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:633) 
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:624) 
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1976) 
at com.test.ftps.TestClass.main(TestClass.java:88) 
    Caused by: java.io.EOFException: SSL peer shut down incorrectly 
at sun.security.ssl.InputRecord.read(Unknown Source) 
... 9 more 

Répondre

1

juste un tick "Exiger la reprise de la session CCM sur la connexion de données ..." dans le serveur filezilla -> Paramètres -> FTP sur TLS Paramètres -> non cocher Exiger Reprise de session TLC sur connexion de données lors de l'utilisation de PROT P

0

En plus de la réponse de l'utilisateur 2750213 (TLS session resumption de Filezilla), prenez garde à ce que les protocoles requis soient activés. Vous pouvez les vérifier en exécutant this code ou this other sur la connexion jvm au serveur FTPS. Les versions récentes du serveur Filezilla utilisent TLSv1.2.

Si cela fonctionne pour vous, vous pouvez obtenir un java.net.SocketException: Les sockets non connectées ne sont pas implémentées. Dans ce cas, vous devez écrire votre propre classe qui étend la classe DefaultSocketFactory et la définir sur votre client FTPS via la méthode ftpsClient.setSocketFactory (yourSocketFactory) remplaçant la méthode createSocket() qui doit renvoyer un nouveau Socket()