![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Nаtаshа |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.10.2011 Репутация: нет Всего: нет |
Доброго всем вечера! Хочу просить у вас совета и помощи. Необходимо реализовать на perl FTP-клиент, а именно возможность скачать и закачать файл с/на сервер. Впринципе с use Net::FTP решить вопрос просто. Но в том то и фишка что пользовать средства CPAN запрещено(условия задания). Вопрос заключается в том, что посоветуете использовать, способы решения, пример и т.д. (т.е. хотя бы скажите в какую сторону копать). В perl я зеленый новичек. Заранее спасибо.
|
|||
|
||||
| dixoNICH |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
perldoc socket
rfc 959 |
|||
|
||||
| Nаtаshа |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.10.2011 Репутация: нет Всего: нет |
Не помогло.
Это сообщение отредактировал(а) Nаtаshа - 10.10.2011, 00:19 |
|||
|
||||
| taryk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 16.1.2011 Где: Ukraine Репутация: нет Всего: нет |
Думаю никто не запретит вам посмотреть исходники модуля Net::FTP и по аналогии реализовать свой ftp-клиент. |
|||
|
||||
| Pfailed |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Алгоритм такой:
1. Открыть сокет 2. Залогиниться
3. Перейти в бинарный режим
4. Перейти в пассивный режим
5. Открыть сокет к адресу указанному сервером в ответе 6. Для загрузки на сервер в сокет открытый на шаге 1
А в сокет открытый на шаге 5 передаём файл Для загрузки с сервера в сокет 1
Из сокета 5 считываем файл. На всех шагах неплохо бы делать проверки на ошибки. У меня есть простейший клиент ftp на C, если нужно скину. |
||||||||||
|
|||||||||||
| Nаtаshа |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.10.2011 Репутация: нет Всего: нет |
Pfailed, как я понимаю вы привели команды, которые понимает FTP-сревер. Алгоритм ясен. Но вот реализация вводит в ступор. Как перейти в бинарный режим и т.д. ? Моего уровня не хватает что бы понять как это сделать.Как создать сокет и установить соединение уже разобралась, а вот дальше как отсылать или что получать это уже не ясно.
Си я сносно знаю. С++ лучше. Думаю,что может эта программа чем то поможет мне.Говорят си и perl похожи. Очень вам благодарна. taryk, Если честно, то это немного сложновато для меня. |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Все функции по работе с ftp в ftp.c, в том числе загрузка/выгрузка файлов
В main.c примеры вызова функций. Вообще да, в Perl функции по работе с сокетами примерно такие же, в остальном всё еще проще. Присоединённый файл ( Кол-во скачиваний: 20 )
ftp.zip 6,82 Kb |
|||
|
||||
| Nаtаshа |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.10.2011 Репутация: нет Всего: нет |
ВЫХОД
Я понимаю, что надо как то выдрать адрес с ответа "227 Entering Passive Mode (193,203,60,110,39,129)" и установить соединение, но моих знаний perl уже не хватает. А потом еще и записать данные в файл. Помогите пожалуйста! Заранее спасибо. |
||||
|
|||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
См. функцию ftp_addr_from_pasv_response() в ftp.c
Вытащить цифры из этой строки в Perl можно с помощью регулярного выражения:
Это сообщение отредактировал(а) Pfailed - 15.10.2011, 20:55 |
|||
|
||||
| Nаtаshа |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 9.10.2011 Репутация: нет Всего: нет |
К сокету, полученному от сервера в ответ на PASV коннестится норм. В Файл ничего не записывается, что делаю не так?. Хотя данные на SOCK2 приходят. Это сообщение отредактировал(а) Nаtаshа - 18.10.2011, 00:01 |
|||
|
||||
| Pfailed |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Nаtаshа, из очевидного:
Вы открыли файл для чтения, но пытаетесь в него записать. Для записи файл открывается так, например:
|
||||
|
|||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |