none
Visual Basic 2008 .Net и ftp протокол с прокси RRS feed

  • Вопрос

  • Доброго времени суток!

    Имеется ftp сервер с которого нужно скачать файл. Задача вроде бы простая, но рабочий ПК "общается" через прокси. И вот это стало для меня непробиваемой стеной.
    Вот код функции скачивания файла:

    Private Sub Download(ByVal filePath As String, ByVal filename As String)
            Dim ftpServerIP As String = "адрес ftp сервера"
            Dim ftpUserID As String = "login"
            Dim ftpPassword As String = "pass"
            Dim fileInf As New IO.FileInfo(filename)
            Dim uri As String = "ftp://" + ftpServerIP + "/" + fileInf.Name
    
    
    
            Dim reqFTP As FtpWebRequest
            Try
                
                Dim proxyObject As New WebProxy("ftp://192.168.1.1:3127")
    
                Dim outputStream As FileStream = New FileStream(filePath + "\\" + filename, FileMode.Create)
    
                reqFTP = FtpWebRequest.Create(New Uri("ftp://" + ftpServerIP + "/" + filename))
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile
                reqFTP.UseBinary = True
                reqFTP.Credentials = New NetworkCredential(ftpUserID, ftpPassword)
                reqFTP.Proxy = proxyObject
    
                Dim response As FtpWebResponse = reqFTP.GetResponse()
    
                'Stream(ftpStream = response.GetResponseStream())
                Dim ftpStream As IO.Stream = reqFTP.GetRequestStream()
    
                Dim cl As Long = response.ContentLength
                'Int(bufferSize = 2048)
                'Int(readCount)
                'Dim buffer As Byte()
                Dim bufferSize As Integer = 2048
                Dim buff(bufferSize) As Byte
                Dim readCount As Integer
    
                readCount = ftpStream.Read(buff, 0, bufferSize)
                While readCount > 0
    
                    outputStream.Write(buff, 0, readCount)
                    readCount = ftpStream.Read(buff, 0, bufferSize)
                End While
    
                ftpStream.Close()
                outputStream.Close()
                response.Close()
    
            Catch ex As Exception
    
                MessageBox.Show(ex.Message, "Download Error")
            End Try
        End Sub
    При использовании http прокси, получаю ошибку, что сервер нарушил протокол.
    А при использовании ftp прокси, получаю ошибку, что "класс ServicePointManager не поддерживает прокси со схемой FTP."

    Любой совет, любая идея будет полезна! А то я уже второй день мучаюсь...

    14 февраля 2013 г. 4:55

Ответы

  • Привет

    А через http прокси на фтп в браузере или total commander пускает или выдает тоже ошибку? Это нужно проверить для того, чтобы понять ошибка в коде у вас или сам фтп так настроен.

    Другой вариант - использование нестандартного компонента для работы с фтп, например попробовать:

    - System.Net.FtpClient

    - edtFTPnet/Free

    - .NET FTP Client

    Платные (естественно перед покупкой уточнить у поддержки или попробовать на бесплатной версии):

    - Rebex.Net

    - Ultimate .NET FTP Component

    Также можно поискать и другие компоненты, например на Codeplex


    Для связи [mail]

    • Помечено в качестве ответа DrKillJoy1 19 февраля 2013 г. 6:29
    15 февраля 2013 г. 7:53
    Модератор