Переключатель FTP WinInet из пассивного режима в активный при подключении?

Я использую WinInet для подключения к FTP-серверу. Я использую FtpCommand() для отправки команды «PASV» для переключения из активного в пассивный режим. Сейчас я ищу противоположную команду для переключения из пассивного в активный режим. Кто-нибудь знает как это сделать?


person Vas    schedule 07.06.2017    source источник
comment
Почему этот вопрос помечен как C ++?   -  person Dai    schedule 07.06.2017
comment
почему минус в вопросе? Я использую C ++ для ftp-соединений. Если бы я не знал, я уверен, что вы бы точно так же спросили, на каком языке программы вы просите ... И если вы не знаете ответа, лучше не портите другим вопросы ...   -  person Vas    schedule 07.06.2017
comment
Если вы пометите вопрос с помощью C ++, мы ожидаем некоторого кода C ++. Совершенно непонятно, о чем вы спрашиваете. Вы реализуете FTP-клиент на C ++ с нуля?   -  person Martin Prikryl    schedule 07.06.2017
comment
Я использую wininet, и, поскольку вопрос очень ясен, я использую команду PASV для переключения из активного в пассивный режим, я ищу противоположную команду или способ переключения с пассивного на активный при подключении к ftp-серверу ...   -  person Vas    schedule 07.06.2017
comment
Где в вашем вопросе написано wininet? Без этой информации это не имеет смысла! Как вы используете PASV с wininet? Это тоже не имеет смысла. Покажи нам свой код!   -  person Martin Prikryl    schedule 07.06.2017


Ответы (1)


Активный режим включается отправкой PORT (или _ 2_) вместо отправки _ 3_ (или EPSV). _5 _ / _ 6_ сообщает серверу, какой IP / порт ему необходимо для активного подключения в вашей системе.

Если вы хотите понять, как работает протокол FTP, я предлагаю вам прочитать спецификацию FTP, RFC 959 и его различных расширений, в частности RFC 2428 и RFC 3659.

В WinInet режим передачи обычно устанавливается в начале сеанса, когда вы вызываете _ 7_ или _8 _. Если вы укажете флаг INTERNET_FLAG_PASSIVE, он включит пассивный режим. Если вы не укажете флаг, режим будет определяться параметрами Интернета пользователя по умолчанию. Этот режим позволяет FtpGetFile() / _ 11_ и _ 12_ / _ 13_ для работы с собственными подключениями к данным. Как только режим установлен для сеанса, его нельзя изменить, AFAIK.

Однако вы можете использовать FtpCommand() для отправки любого FTP вручную, включая _15 _ / _ 16_ и _17 _ / _ 18_. Если вы установите для параметра fExpectResponse значение TRUE, выходной параметр phFtpCommand даст вам новый HINTERNET дескриптор, если будет создан сокет данных. Вы можете использовать этот дескриптор с InternetReadFile() и _ 23_ для передачи файлов и списков каталогов через это соединение для передачи данных.

person Remy Lebeau    schedule 07.06.2017
comment
Слава Реми, я действительно использую wininet и internetconnect () без указания флага, но, как показали локальные испытания, он может перейти в пассивный режим с помощью ftpcommand и опции PASV. (я еще никогда не тестировал его на онлайн-серверах) Я попробую то же самое с командой EPRT maby, если повезет, она работает, по крайней мере, на локальном ftp-сервере. (Позже я проверю эти две опции на онлайн-серверах и посмотрю, что происходит). Маби переподключится с новой опцией, если она не может быть изменена при подключении. - person Vas; 07.06.2017