Установите Номер порта при использовании FtpWebRequest в C#

Я продолжаю получать исключение, когда я пробую к FTP к моему Серверу Win 2008 от кода C# с помощью VS2008 в качестве отладчика.

Мой тестовый класс похож на это:

public class FTP
{
    private string ftpServerIP = "192.168.10.35:21";
    private string ftpUserID = "Administrator";
    private string ftpPassword = "XXXXXXXX";
    private string uploadToFolder = "uploadtest";

    public void Upload(string filename)
    {
        FileInfo fileInf = new FileInfo(filename);
        string uri = "ftp://" + ftpServerIP + "/" + uploadToFolder + "/" + fileInf.Name;
        FtpWebRequest reqFTP;

        reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
        reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
        reqFTP.KeepAlive = false;
        reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
        reqFTP.UseBinary = true;
        reqFTP.ContentLength = fileInf.Length;

        int buffLength = 2048;
        byte[] buff = new byte[buffLength];
        int contentLen;

        FileStream fs = fileInf.OpenRead();
        try
        {
            Stream strm = reqFTP.GetRequestStream();
            contentLen = fs.Read(buff, 0, buffLength);

            while (contentLen != 0)
            {
                strm.Write(buff, 0, contentLen);
                contentLen = fs.Read(buff, 0, buffLength);
            }

            strm.Close();
            fs.Close();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
}

Когда я выполняю код, я привел Соединение к сбою с ошибкой FTP 227 в GetRequestStream () вызов. В исключении I видят, что связь прерывается: 192.168.10.35:52184

Я понятия не имею, как это придумывает порт 52184. Я определяю в ftpServerIP, что это должен быть порт 21.

Я нашел несколько человек с теми же проблемами о Google, но я не нашел хороший пример о том, как это решено, и я все еще не понимаю, почему это происходит.

Кто-либо знает, как обработать эту проблему??

ОБНОВЛЕНИЕ:

Я попытался соединиться с другой учетной записью FTP, и там все это хорошо работает. Поэтому я протестировал мой 192.168.10.35:21 FTP, но он хорошо работает в CuteFTP Pro и подобных. Это просто делает это еще более странным..

9
задан The real napster 18 May 2009 в 08:22
поделиться

2 ответа

Я предполагаю, что это проблемы с брандмауэром Windows, FTP использует другие порты, а не только порт 21 - иногда изменение режима FTP с активного на пассивный помогает наладить работу.

reqFTP.UsePassive = false;

Посмотрите в этой хорошей статье о FTP: Активный FTP против пассивного FTP, окончательное объяснение

7
ответ дан 4 December 2019 в 19:36
поделиться

Тут все правильно, это связано с пассивным режимом

Исправление в коде настолько безумно простое :)

reqFTP.UsePassive = false;

И все работало быстро и без ошибок!

4
ответ дан 4 December 2019 в 19:36
поделиться