Простой FTP-клиент на Java может отправлять команду «list» только один раз в пассивном режиме - PullRequest
0 голосов
/ 15 ноября 2011

У меня все еще есть некоторые проблемы, связанные с сеансом FTP между моим простым клиентом FTP, написанным на Java, и сервером proFTP.

Я подключился к серверу в пассивном режиме.Когда я отправляю команду list, я получаю ответ в ASCII о том, какие файлы находятся на сервере.Если я снова отправлю команду list, я не получу никакого ответа.Я даже не могу получить ответ от других команд FTP, которые я отправляю.Кажется, что сессия "зависает".

Почему мое простое Java-приложение перестает получать ответы при повторной отправке команды list?

1 Ответ

1 голос
/ 15 ноября 2011

В FTP как активный, так и пассивный режимы предоставляют отдельный канал для передачи данных.Всякий раз, когда вы хотите отправить команду в пассивном режиме, которая включает отправку данных (например, list), вы должны повторно отправить PASV, чтобы сообщить серверу, что вы собираетесь выполнить операцию, которая включает соединение для передачи данных.Затем сервер может открыть новый сокет или продолжить использовать тот же.

Вот пример сеанса:

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.

Обратите внимание, что моя вторая попытка использовать LIST не удалась, посколькуне открыл канал данных.После того, как я отправил еще один PASV, я смог снова использовать LIST.

...