2011-11-15 14 views
0

Javaで書かれた簡単なFTPクライアントとproFTPサーバの間のFTPセッションに関するいくつかの問題があります。Javaの単純なFTPクライアントは、パッシブモードで「list」コマンドを1回だけ送信できます

パッシブモードを使用してサーバーに接続しました。 listコマンドを送信すると、サーバー上にあるファイルのASCII形式の応答が返されます。 listコマンドを再度送信した場合、私は何の応答も得ません。私は私が送る他のFTPコマンドからの応答を得ることすらできません。セッションが "ハングする"ようです。

listコマンドをもう一度送信すると、自分の単純なJavaアプリケーションが応答を停止するのはなぜですか?

答えて

1

FTPでは、アクティブモードとパッシブモードの両方が、データを転送するための別個のチャネルを提供します。パッシブモードでデータを送信するコマンド(例:list)を送信する場合は、PASVを再送信して、データ接続に関連する操作を実行しようとしていることをサーバーに伝える必要があります。サーバーは新しいソケットを開くか、同じソケットを使用し続けます。

ここでは例のセッションです:私は、データ・チャネルを開設していなかったので、LISTを使用する私の第二の試みが失敗したことを

230 Login successful. 
PASV 
227 Entered Passive Mode (123,245,209,137,199,61) 
LIST 
150 Here comes the directory listing. 
226 Directory send OK. 
LIST 
425 Use PORT or PASV first. 
PASV 
227 Entered Passive Mode (123,245,209,137,202,198) 
LIST 
150 Here comes the directory listing. 
226 Directory send OK. 

をお知らせ。 PASVをもう一度送ったら、LISTをもう一度使用できました。

+0

ありがとうございます!出来た!私は各データチャンネルにPASVを送信しなければならないことを知りませんでした。したがって、FTPクライアントはパッシブモードとアクティブモードの両方で同時にファイルを操作できますか? – Rox

+0

確かに、一部のFTPサーバーはそれをサポートしていません。しかし、通常それは可能です。ほとんどのユーザはNATルータの背後にあるので、PASVは最近ほとんど標準モードになっています。 – Polynomial

関連する問題