FtpWebRequest открывает случайный порт вместо 21 - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу загружать файлы в моей программе через FTP. Godaddy серверы работают только с портом 21. Однако каждый раз, когда я хочу подключиться, соединение отклоняется, потому что случайный номер порта вместо порта 21

Метод, который я использую, как показано ниже

FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + "turcguide.com" + ":21"));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential("myusername", "mypass");
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
reqFTP.Proxy = null;
reqFTP.KeepAlive = false;
reqFTP.UsePassive = false;
WebResponse resp = reqFTP.GetResponse();

Использование VS 2008 .NET 3.5 в ОС Windows 7 Home Basic.

Может кто-нибудь помочь, что мне не хватает в этом методе.

Ошибка, которую я получаю:

425 Не удалось открыть соединение для передачи данных к порту 49756. Тайм-аут соединения (номер порта изменяется при каждом запуске)

1 Ответ

0 голосов
/ 06 сентября 2018

Вы используете активный режим FTP.

В активном режиме клиент (в данном случае FtpWebRequest) открывает порт прослушивания для каждой передачи, к которой должен подключиться сервер. Этот номер порта является случайным, он не может быть 21. Это правильное поведение. Причина, по которой это не работает, не в том, что случайный порт не поддерживается GoDaddy. Причина в том, что ваш брандмауэр Windows не позволяет GoDaddy подключиться к этому порту.

Если вы не хотите, чтобы клиент открывал случайные порты, используйте пассивный режим. В пассивном режиме порт открывает сервер, а не клиент. В общем, вы всегда должны использовать пассивный режим, так как вы хотите иметь проблемы с брандмауэром. Пассивный режим на самом деле является режимом по умолчанию для FtpWebRequest. Вы явно переключились в активный режим с помощью этого оператора:

reqFTP.UsePassive = false;

Просто удалите вышеприведенную строку, и все будет хорошо.

Подробнее см. В моей статье Режимы FTP-соединения .

...