Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/64: Рейтинг темы: голосов - 64, средняя оценка - 4.77
15 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 41

Загрузить\Выгрузить файл(ы) на FTP в пассивном режиме

28.03.2017, 11:31. Показов 12143. Ответов 9
Метки ftp (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Столкнулся с проблемой, обмена с FTP (на IIS) с помощью Net.FtpWebRequest в пассивном режиме.
При попытке загрузить список каталогов, получить или отправить на фтп данные сообщает об ошибке: 227 Entering Passive Mode (ххх,ххх,ххх,ххх,224,18).
Использование свойства UsePassive = true, также не помогает, ошибка повторяется.
Если свойство установить в UsePassive = false, сообщит о следующей ошибке: "500 PORT/EPRT (Active Mode/Extended Active Mode) is not supported. Use PASV/EPSV instead of this"
Примеры кода перепробовал несколько, в т.ч. и из готовых решений, ошибка одна и таже.
Поиск по форуму, да и гуглу особо результата не дал.

Да я понимаю, что при пассивном подключении нужно получить порт от сервера, но вот как его получить и подключиться к серверу никак не пойму. Пароли и прочее все верно. Подключение через браузер и тоталкомандер успешные.

Вот один из примеров кода на котором я тестировал (значение свойства UsePassive = true, дописывал самостоятельно):
Кликните здесь для просмотра всего текста

VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Public Class FTP
    '-------------------------[BroCode]--------------------------
    '----------------------------FTP-----------------------------
    Private _credentials As System.Net.NetworkCredential
    Sub New(ByVal _FTPUser As String, ByVal _FTPPass As String)
        setCredentials(_FTPUser, _FTPPass)
    End Sub
    Public Sub UploadFile(ByVal _FileName As String, ByVal _UploadPath As String)
        Dim _FileInfo As New System.IO.FileInfo(_FileName)
        Dim _FtpWebRequest As System.Net.FtpWebRequest = CType(System.Net.FtpWebRequest.Create(New Uri(_UploadPath)), System.Net.FtpWebRequest)
        _FtpWebRequest.Credentials = _credentials
        _FtpWebRequest.KeepAlive = False
        _FtpWebRequest.Timeout = 20000
        _FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
        _FtpWebRequest.UseBinary = True
        _FtpWebRequest.ContentLength = _FileInfo.Length
        _FtpWebRequest.UsePassive = True
        Dim buffLength As Integer = 2048
        Dim buff(buffLength - 1) As Byte
        Dim _FileStream As System.IO.FileStream = _FileInfo.OpenRead()
        Try
            Dim _Stream As System.IO.Stream = _FtpWebRequest.GetRequestStream()
            Dim contentLen As Integer = _FileStream.Read(buff, 0, buffLength)
            Do While contentLen <> 0
                _Stream.Write(buff, 0, contentLen)
                contentLen = _FileStream.Read(buff, 0, buffLength)
            Loop
            _Stream.Close()
            _Stream.Dispose()
            _FileStream.Close()
            _FileStream.Dispose()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Upload Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
    Public Sub DownloadFile(ByVal _FileName As String, ByVal _ftpDownloadPath As String)
        Try
            Dim _request As System.Net.FtpWebRequest = System.Net.WebRequest.Create(_ftpDownloadPath)
            _request.KeepAlive = False
            _request.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
            _request.Credentials = _credentials
            Dim _response As System.Net.FtpWebResponse = _request.GetResponse()
            Dim responseStream As System.IO.Stream = _response.GetResponseStream()
            Dim fs As New System.IO.FileStream(_FileName, System.IO.FileMode.Create)
            'responseStream.CopyT(fs)
            responseStream.Close()
            _response.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Download Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
    Public Function GetDirectory(ByVal _ftpPath As String) As List(Of String)
        Dim ret As New List(Of String)
        Try
            Dim _request As System.Net.FtpWebRequest = System.Net.WebRequest.Create(_ftpPath)
            _request.KeepAlive = False
            _request.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails
            _request.Credentials = _credentials
            Dim _response As System.Net.FtpWebResponse = _request.GetResponse()
            Dim responseStream As System.IO.Stream = _response.GetResponseStream()
            Dim _reader As System.IO.StreamReader = New System.IO.StreamReader(responseStream)
            Dim FileData As String = _reader.ReadToEnd
            Dim Lines() As String = FileData.Split(New String() {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
            For Each l As String In Lines
                ret.Add(l)
            Next
            _reader.Close()
            _response.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Directory Fetch Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
        Return ret
    End Function
 
    Private Sub setCredentials(ByVal _FTPUser As String, ByVal _FTPPass As String)
        _credentials = New System.Net.NetworkCredential(_FTPUser, _FTPPass)
    End Sub
End Class
Использование:
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
  Dim ftp As New FTP("server", "pass")
 
        ftp.UploadFile("localfile", "hostfile")
 
        ftp.DownloadFile("localfile", "hostfile")
 
        Dim directory As List(Of String) = ftp.GetDirectory("ftp://hostdir/")
        ListBox1.Items.Clear()
        For Each item As String In directory
            ListBox1.Items.Add(item)
        Next


Пожалуйста, помоги разобраться и как осуществить подключение к серверу в пассивном режиме, может даже пример кода у кого завалялся.
Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2017, 11:31
Ответы с готовыми решениями:

Открыть ftp.exe, открыть соединение с FTP-сервером, залогиниться, загрузить файл в бинарном режиме и выйти
С помощью .bat мне нужно открыть ftp.exe, открыть соединение с ftp сервером, залогиниться, залить файл в бинарном режиме, выйти. Я...

Загрузить файл в память и выгрузить
Задача в том, чтоб написать приблуду для DOS для &quot;многозадачности&quot; Столкнулся с проблемами: Нужно загрузить com в память. Думаю, что...

Загрузить файл по ftp
Пытаюсь загрузить html файл. Выскакивает ошибка: Необработанное исключение типа &quot;System.Net.WebException&quot; в System.dll ...

9
53 / 53 / 17
Регистрация: 12.02.2017
Сообщений: 261
28.03.2017, 16:32
Цитата Сообщение от ruspad Посмотреть сообщение
"500 PORT/EPRT (Active Mode/Extended Active Mode) is not supported. Use PASV/EPSV instead of this"
Скорее всего ваши ошибка указывают на то сервер через данный порт не может подключится. И почему вам необходим именно пассивный режим?
0
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
28.03.2017, 16:36
Это получается сам ftp настроен на такой режим работы?
Попробовал этот код со своим ftp, все успешно отрабатывает, по крайней мере список каталогов получаю без проблем.
VB.NET Скопировано
1
2
3
4
5
6
Dim ftp As New FTP("login", "password")
 Dim directory As List(Of String) = ftp.GetDirectory("ftp://site.ru/")
        ListBox1.Items.Clear()
        For Each item As String In directory
            ListBox1.Items.Add(item)
        Next
0
15 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 41
29.03.2017, 16:54  [ТС]
Цитата Сообщение от Navthe Посмотреть сообщение
Скорее всего ваши ошибка указывают на то сервер через данный порт не может подключится.
Прямой перевод говорит о том, что работа в активном режиме не поддерживается, мол используйте пассивный режим работы.
Цитата Сообщение от Navthe Посмотреть сообщение
И почему вам необходим именно пассивный режим?
К большому сожалению, так настроен данный фтп сервер.

Цитата Сообщение от Orlangur1991 Посмотреть сообщение
Это получается сам ftp настроен на такой режим работы?
да, все верно. К нему можно подключиться только в пассивном режиме.

Добавлено через 4 минуты
Цитата Сообщение от Orlangur1991 Посмотреть сообщение
Попробовал этот код со своим ftp, все успешно отрабатывает, по крайней мере список каталогов получаю без проблем
с сервером наверно можно работать в активном режиме. к сожалению это не мой случай ((
0
53 / 53 / 17
Регистрация: 12.02.2017
Сообщений: 261
29.03.2017, 21:03
Цитата Сообщение от ruspad Посмотреть сообщение
Прямой перевод говорит о том, что работа в активном режиме не поддерживается, мол используйте пассивный режим работы.
А через программы для ftp пробовали ?
0
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
29.03.2017, 21:33
Navthe, Об этом писали,
Цитата Сообщение от ruspad Посмотреть сообщение
Подключение через браузер и тоталкомандер успешные.
1
53 / 53 / 17
Регистрация: 12.02.2017
Сообщений: 261
29.03.2017, 22:38
Цитата Сообщение от Orlangur1991 Посмотреть сообщение
Об этом писали,
ОК

ruspad, а что за сайт?
0
15 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 41
30.03.2017, 10:08  [ТС]
Цитата Сообщение от Navthe Посмотреть сообщение
ruspad, а что за сайт?
Это сервер в интрасети. =(
0
15 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 41
04.04.2017, 11:04  [ТС]
Всем привет!
дааа не может быть, чтобы никто не подключался к фтп в пассивном режиме
0
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
04.04.2017, 11:27
ruspad, негде пробовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2017, 11:27
Помогаю со студенческими работами здесь

Как загрузить файл на FTP
Плдскажите, как загрузить файл на FTP сервер, при попытке загрузить файл выдает ошибку procedure ftpsend( host , username , password ,...

Загрузить файл с FTP-сервера
Нужно загрузить файл с удаленного сервера, именно загрузить потому что копирование запрещено Написал так: bat: @echo off ftp.exe...

Как загрузить файл на FTP сервер
Здравствуйте. Необходимо загрузить zip файл на ftp сервер. Ниже приведен код реализации программы с помощью которой я загружал txt файлы....

Загрузить/скачать файл по FTP протоколу
Господа, будьте добры, необходим рабочий пример. Заранее всем большое спасибо! Не могу найти нормальный рабочий пример..

Загрузить/скачать файл по FTP протоколу
Господа, будьте добры, необходим рабочий пример. Заранее всем большое спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер