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)
後に以下の行を追加します
削除してくださいFTPハング:150オープニングASCIIモードデータ接続が。私はそれを殺さなければならなかった。私は本当にそれがなぜftpを回転させたのか分かりません。パッシブモードを削除するとファイルbtwをアップロードすることができましたが、プログラムが停止しました/ FILES/FileStorage/FTP_Testのバイナリモードデータ接続を開く " – Angelina
これはファイアウォール/ネットワーク問題のようです。未知のポートへの接続を行います。ファイアウォールの設定を変更する方法については、こちらを参照してください。http://www.dummies.com/computers/operating-systems/windows-7/how-to-allow-programs-through-the-windows-7 -firewall/ また、別のftpクライアントを使用して、ftpサーバーがうまく動作していることを確認することもできます。 – Guenther