-
Виталий (10.11.13 14:45) [0]Доброго всем. Обьясните мне пожалуйста принципы работы пассивного и активного режима. Я не могу понять как именно их обрабатывать. Используя ftp.exe подключаюсь к своей программе. Она воспринимает все команды, которые не требуют открытия порта данных, и диалог идет нормально. Но когда я из ftp.exe посылаю команду PASV связь просто прерывается.
Я не могу понять как мне описать на сервере реакцию - сначала открывать порт для данных, создавать новый сокет или нет, и когда сообщать клиенту что канал готов?
При приеме команды PASV мой сервер сейчас возвращает в канал управления строку 227 Entering Passive Mode (тут данные). Но канал данных не открывает, как я понимаю он открывается потом для команд типа LIST REST и т.д., но не сразу.
Но эта строка до клиента не доходит, send() сообщает ошибку 10053 (WSAECONNABORTED).
Не пойму почему связь прерывается.
Каков правильный механизм обработки PASV? -
megavoid © (10.11.13 18:03) [1]первая же ссылка - даже с примером dataflow
http://stackoverflow.com/questions/1699145/what-is-the-difference-between-active-and-passive-ftp -
Виталий (10.11.13 19:42) [2]Я правильно понял:
1) Клиент мне посылает PASV
2) Мой обработчик команд "выбирает" новый порт данных, открывает новый сокет, биндит и ставит на него прослушку:
...socket(...
...bind(...
...listen(...
3) После я отсылаю клиенту строку с кодом 227 (и параметрами нового порта), и в зависимости от команды либо пишу в открытый канал данные либо ловлю accept()-ом данные от клиента?