0

FTPクライアントを実装するためにftp4jライブラリを使用していますが、接続しようとしているサーバーはアクティブモードでのみ接続を受け入れます。

したがって、リモートファイルをリストしようとすると、次のようになります:

ERROR : Error in Connecting to Remote Machine... Hence exitting...
it.sauronsoftware.ftp4j.FTPException [code=501, message= Server cannot accept argument.]
at     it.sauronsoftware.ftp4j.FTPClient.openActiveDataTransferChannel(FTPClient.java:3600)
at it.sauronsoftware.ftp4j.FTPClient.openDataTransferChannel(FTPClient.java:3551)
at it.sauronsoftware.ftp4j.FTPClient.listNames(FTPClient.java:2335)
at com.npap.network.TranferFileFtp4j.listRemoteFilesFtp1(TranferFileFtp4j.java:999)

コードは次のとおりです。

...
//connect to server method - in active mode!
ftpClient = Ftp4jUtility.connect1(SERVER_MACHINE, PORT, SERVER_USERNAME, SERVER_PASSWORD);

try {
    ftpClient.changeDirectory(config.getFtpRemoteFolderReports());    
    log.info("Changed directory to: " + config.getFtpRemoteFolderReports());
} catch (FTPException | FTPIllegalReplyException | IOException | IllegalStateException e) {
    e.printStackTrace();
}

String[] filesList = ftpClient.listNames();
    for(String f: filesList) {
        log.info("fetched file: " + f);
        tmpAllRemoteFiles.add(f);
}

アクティブモードで接続しているときにリモートファイルを一覧表示する方法はありますか?

4

1 に答える 1

1

.listNames()はい、アクティブモードで使用できます。

問題は、サーバーがクライアントに接続してデータ接続を開くことができない可能性があります。ローカル ファイアウォール (存在する場合) で FTP データ接続範囲からポートを開き、NAT (存在する場合) で着信接続をルーティングする必要があります。

アクティブ モードの FTP の構成は面倒であり、めったに使用されません。

FTP アクティブ モードに関して必要なネットワーク構成に関する (私の) 記事をご覧ください。

501 エラー コードは、FTP サーバー (IIS の可能性があります) からのものです。「501 サーバーは引数を受け入れることができません」をグーグルで検索すると、同様の問題がたくさん見つかります。

コードに問題はありません。これは、ネットワーク構成またはサーバー側の問題です。

于 2015-02-25T06:27:31.370 に答える