2016-09-02 14 views
0

upload/downloadのファイルにFTPClientを実装しようとしています。ファイルをアップロードしようとしたときにFTPClient接続タイムアウトが失敗しました/

エラーは発生しませんが、ファイルはアップロードされません。 F:\ driveを指すようにFTPサーバーを構成し、ftp_userに対して777を許可しました。

フォルダの内容を表示したいときにタイムアウトします。

マイコード:

public static void main(String[] args) 
     {  
      FTPFunctions ftpobj = new FTPFunctions("xxx.xxx.x.xxx", 21, "ftp_user", "Xxxxxxxxx"); 
      ftpobj.uploadFTPFile("F:\\FILES\\upload\\FTP_Test", "FTP_Test", "/FILES/FileStorage/"); 
ftpobj.listFTPFiles("/FILES/FileStorage/", ""); 
      ftpobj.disconnect();  
     } 
     public FTPFunctions(String host, int port, String username, String password) throws Exception{ 

      ftp = new FTPClient(); 
      ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); 
      int reply; 
      ftp.connect(host, port); 
      System.out.println("FTP URL is:"+ftp.getDefaultPort()); 
      reply = ftp.getReplyCode(); 
      if (!FTPReply.isPositiveCompletion(reply)) { 
       ftp.disconnect(); 
       throw new Exception("Exception in connecting to FTP Server"); 
      } 
      ftp.login(username, password); 
      ftp.setFileType(FTP.BINARY_FILE_TYPE); 
      ftp.enterLocalPassiveMode(); 
     } 

     public void uploadFTPFile(String localFileFullName, String fileName, String hostDir) throws Exception { 
      try { 
       InputStream input = new FileInputStream(new File(localFileFullName)); 
       this.ftp.storeFile(hostDir + fileName, input); 
      } 
      catch(Exception e) 
     } 

出力:

220 Microsoft FTP Service 
FTP URL is:21 
USER ftp_user 
331 Password required for ftp_user. 
PASS Xxxxxxxxx 
230 User ftp_user logged in. 
TYPE I 
200 Type set to I. 
PASV 
227 Entering Passive Mode (xxx,xxx,x,xxx,208,106). 
java.net.ConnectException: Connection timed out: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:924) 
at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:657) 
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:643) 
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:2033) 
at mil.dla.daps.ftp.FTPFunctions.uploadFTPFile(FTPFunctions.java:60) 
at mil.dla.daps.ftp.FTPFunctions.main(FTPFunctions.java:121) 

答えて

1

がuploadFTPFileメソッドで例外があるかもしれません。メソッドを

public void uploadFTPFile(String localFileFullName, String fileName, String hostDir) throws Exception { 
     try { 
      InputStream input = new FileInputStream(new File(localFileFullName)); 
      this.ftp.storeFile(hostDir + fileName, input); 
     } 
     catch(Exception e) { 
      e.printStrackTrace(); 
     } 
    } 

に変更し、例外が出力されるかどうかを確認してください。

EDIT 1

たぶんftpサーバはパッシブモードをサポートしていませんか?直接ループのために作られたと付け加えログイン

for (String file : ftp.listFiles("/")) { 
    System.out.println("File: " + file); 
} 
+0

後に以下の行を追加します

ftp.enterLocalPassiveMode(); 

削除してくださいFTPハング:150オープニングASCIIモードデータ接続が。私はそれを殺さなければならなかった。私は本当にそれがなぜftpを回転させたのか分かりません。パッシブモードを削除するとファイルbtwをアップロードすることができましたが、プログラムが停止しました/ FILES/FileStorage/FTP_Testのバイナリモードデータ接続を開く " – Angelina

+0

これはファイアウォール/ネットワーク問題のようです。未知のポートへの接続を行います。ファイアウォールの設定を変更する方法については、こちらを参照してください。http://www.dummies.com/computers/operating-systems/windows-7/how-to-allow-programs-through-the-windows-7 -firewall/ また、別のftpクライアントを使用して、ftpサーバーがうまく動作していることを確認することもできます。 – Guenther

関連する問題