FTP受動モード接続とタイムアウト問題解決

938 ワード

問題:1、FTPClient.listFiles()またはFTPClient.retrieveFile()方法の時、そこで止まって、何の反応もなく、仮死状態が現れます。2、FTPサーバに接続し、長時間データ操作を行った場合、タイムアウトは自動的に切れます。分析:1、ftp serverは毎回異なるポートを開けてデータを伝送することができるため、しかしlinuxの上で、安全の制限のため、いくつかのポートが開けていないかもしれないので、渋滞が発生します。2、ftpのポート番号20、21はデータポートであり、一つは制御ポートであり、制御ポートは一般的に21であり、データポートは必ずしも20ではない。これはFTPのアプリケーションモードと関連しており、アクティブモードであれば、20であるべきで、もし受動モードであれば、サーバ側とクライアント側の協議によって決まる。21制御ポートがアクティブになったら、データポートが長時間データ操作を行うと、サーバが設定したタイムアウト時間になり、自動的に接続が切断されます。解決方法:1、これらの2つの方法を呼び出す前に、Client.enterLocalPassiveMode();を呼び出すということは、データ接続の前に、ftp clientがftp serverにポートを開いてデータを転送するということです。Cient.enterLocal Passive Mode()この方法はログインする前にもログイン後にも大丈夫です。2、複数のファイルを長時間ダウンロードまたは操作した場合、タイムアウトになり接続が切断されます。ダウンロード操作が完了したら、サーバにコマンドを返して、21ポートをアクティブにして、タイムアウト時間をリセットしてもいいです。
client.sendCommand("pwd");
問題解決
著作権声明:本文はブロガーのオリジナル文章で、ブロガーの許可なしに転載してはいけません。