Простой FTP-клиент на Java может отправлять команду "list" только один раз в пассивном режиме
У меня все еще есть некоторые проблемы относительно сеанса FTP между моим простым клиентом FTP, написанным на Java, и сервером proFTP.
Я подключился к серверу в пассивном режиме. Когда я отправляю list
Команда Я получаю ответ в ASCII о том, какие файлы находятся на сервере. Если я отправлю list
Команда снова, я не получаю никакого ответа. Я даже не могу получить ответ от других команд FTP, которые я отправляю. Кажется, сессия "зависает".
Почему мое простое Java-приложение перестает получать ответы при отправке list
командовать во второй раз?
1 ответ
В 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
снова.