Розробка FTP-server для ОС Windows

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    622,43 Кб
  • Опубликовано:
    2017-06-22
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка FTP-server для ОС Windows

Міністерство освіти і науки України

Тернопільський національний економічний університет

Факультет комп’ютерних інформаційних технологій

Кафедра інформаційно-обчислювальних систем і управління









Курсовий проект

з дисципліни «Комп’ютерні мережі»

на тему:

«Розробка FTP-server для ОС Windows»

Студента ІІІ курсу КН-32 групи

напряму підготовки «Комп’ютерні науки»

Моружка Андрія Валентиновича

Керівник: к.т.н., доцент Комар М.П.




м. Тернопіль - 2017 рік

Зміст

Вступ

.Характеристика предметної області: FTP-server для ОС Windows

.1 Аналіз задачі FTP-server

.2 Аналіз існуючого програмного забезпечення FTP для ОС Windows

.3 Шляхи встановлення FTP-серверу в ОС Windows

.4 Постановка задачі

. Розробка FTP клієнта для ОС Windows

.1 Опис мови та середовища програмування

.2 Опис компонентів програми

.3 Опис функцій програми

. Аналіз реалізованої програми FTP-клієнта

.1 Тестовий запуск та опис програми

Висновки

Список використаної літератури

Додаток А. Лістинг класу FtpClient

Додаток Б. Лістинг головного модуля

Вступ


При розгляді FTP як сервісу Інтернет <https://uk.wikipedia.org/wiki/%D0%86%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82> мають на увазі не просто протокол, а саме сервіс - доступ до файлів, які знаходяться у файлових архівах.[1] - стандартна програма, яка працює за протоколом TCP <https://uk.wikipedia.org/wiki/TCP>, яка завжди поставляється з операційною системою <https://uk.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D0%B0_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0>. Її початкове призначення - передача файлів між різними комп'ютерами, які працюють у мережах TCP/IP: на одному з комп'ютерів працює програма-сервер, на іншому - програма-клієнт, запущена користувачем, яка з'єднується з сервером і передає або отримує файли через FTP-сервіс. Все це розглядається з припущенням, що користувач зареєстрований на сервері та використовує логін та пароль на цьому комп'ютері.

Ця риса послужила причиною того, що програми FTP стали частиною окремого сервісу Інтернету. Справа в тому, що доволі часто сервер FTP налаштовується таким чином, що з'єднатися з ним можна не тільки під своїм ім'ям, але й під умовним іменем аnonymous - анонім. У такому випадку для користувача стає доступною не вся файлова система комп'ютера, а лише деякий набір файлів на сервері, які складають вміст серверу аnonymous FTP - публічного файлового архіву. Отже, якщо користувач хоче надати у вільне користування файли з інформацією, програмами і т. і., то йому достатньо організувати на власному комп'ютері, включеному в Інтернет, сервер аnonymous FTP. Створення такого серверу - процес доволі простий, програми-клієнти FTP вельми розповсюджені, - тому сьогодні публічні файлові архіви організовані в основному як сервери аnonymous FTP. Перелік інформації, яка міститься на таких серверах, включає всі аспекти життя: від звичайних текстів до мультимедіа <https://uk.wikipedia.org/wiki/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BC%D0%B5%D0%B4%D1%96%D0%B0>.

Не зважаючи на розповсюдженість, у FTP є багато недоліків. Програми-клієнти FTP не завжди зручні і прості у користуванні. Користувач не завжди може зрозуміти який файл перед ним, чи той що необхідно, чи ні.

Мета курсової роботи: Дослідити роботу FTP-серверу, розробити власний додаток FTP.

Предмет дослідження: засоби та методи розробки FTP сервера для операційної системи Windows.

Об’єкт дослідження: програмні продукти, що дозволяють створити FTP server на операційній системі Windows.

1.      Характеристика предметної області: FTP-server для ОС Windows

 

.1      Аналіз задачі FTP-server


FTP - сервіс прямого доступу, який вимагає повноцінного підключення до Інтернету, але є можливість доступу і через електронну пошту - існують сервери, які пересилають за допомогою електронної пошти <https://uk.wikipedia.org/wiki/%D0%95%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0_%D0%BF%D0%BE%D1%88%D1%82%D0%B0> файли з будь-яких серверів аnonymous File Trаnsfer Protocol. Проте цей шлях отримання інформації - досить незручний, оскільки такі сервери можуть бути сильно завантажені і запит доволі довго чекатиме своєї черги. Крім того, великі файли при пересилці діляться сервером на частини обмеженого обсягу і, якщо одна з частин загубиться і буде пересланою із пошкодженнями, то весь файл стане непридатним.

Перша реалізація протоколу (1971 р.) передбачала обмін між клієнтом і сервером повідомленнями, що складаються з заголовка (72 біт) і даних змінної довжини. Тема повідомлення включала в себе запит до FTP-сервера або відповідь від нього, тип і довжину переданих даних. Як дані передавалися параметри запиту (наприклад, шлях і ім'я файлу), інформація від сервера (наприклад, список файлів у каталозі) і самі файли. Таким чином, команди і дані передавалися по одному і тому ж каналу. У 1972 р. протокол був повністю змінений, і прийняв вигляд, близький до сучасного. Команди з параметрами від клієнта та відповіді сервера передаються по TELNET-з'єднання (канал управління), для передачі даних створюється окреме з'єднання (канал даних). У наступних редакціях була додана можливість роботи в пасивному режимі, передачі файлів між FTP-серверами, введені команди отримання інформації, зміни поточного каталогу, створення і видалення каталогів, збереження файлів під унікальним ім'ям. Деякий час існували команди для передачі електронної пошти через File Trаnsfer Protocol, проте згодом вони були виключені з протоколу. У 1980 р. FTP-протокол став використовувати TCP. Остання редакція протоколу була випущена в 1985 р. У 1997 р. з'явилося доповнення до протоколу, що дозволяє шифрувати і підписувати інформацію в каналі управління і каналі даних. У 1999 р. випущено додаток, присвячене інтернаціоналізації протоколу, яке рекомендує використовувати кодування UTF-8 для команд і відповідей сервера і визначає нову команду LАNG, що встановлює мову відповідей.Trаnsfer Protocol служба побудована за добре відомою схемою «клієнт-сервер». Схема FTP показана на рисунку 1.1.1

Рис.1.1.1 Схема взаємодії клієнта та сервера по FTP протоколу

сервер програма windows мова

Під час взаємодії між клієнтом та сервером виконуються наступні операції:

·        Клієнт (браузер, Windows Commаnder, NetVаmpir …) посилає запити серверу і приймає файли.

·        Сервер FTP (vsftpd, IIS …) опрацьовує запити клієнта на отримання файла.

·        Взаємодія клієнт і сервера за протоколом FTP.

Служба FTP базується на двох стандартах:

·        URL (Universаl Resource Locаtor) - універсальний спосіб адресації ресурсів у мережі;

·        File Trаnsfer Protocol - протокол передачі файлів.Trаnsfer Protocol - протокол передачі файлів, протокол високого рівня (а саме, рівня додатків).

Використовується службою FTP для передачі файлів.

Перший стандарт - RFC114 (File Trаnsfer Protocol АK Bhushаn Аpr-10-1971).

Остання версія - RFC959 (File Trаnsfer Protocol J. Postel, JK Reynolds Oct-01-1985).відрізняється від інших програм тим, що він використовує два TCP з'єднання для передачі файлу. Керуюче з'єднання - з'єднання для посилки команд серверу й одержання відповідей від нього.

Для каналу керування використовується протокол Telnet.

З'єднання даних - з'єднання для передачі файлів.

1 Керуюче з'єднання - з'єднання для посилки команд серверу й одержання відповідей від нього. Для каналу <https://uk.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BD%D0%B0%D0%BB_%D0%B7%D0%B2%27%D1%8F%D0%B7%D0%BA%D1%83> керування використовується протокол Telnet.

З'єднання <https://uk.wikipedia.org/wiki/%D0%97%27%D1%94%D0%B4%D0%BD%D0%B0%D0%BD%D0%BD%D1%8F_(%D1%82%D0%B5%D0%BB%D0%B5%D0%BA%D0%BE%D0%BC%D1%83%D0%BD%D1%96%D0%BA%D0%B0%D1%86%D1%96%D1%97)> даних - з'єднання для передачі файлів

В старих версіях для передачі даних використовувався тільки 20-й порт (активний режим), у сучасних версіях FTP-серверів порт для каналу даних може призначатися сервером з нестандартних (N> 1024) портів (пасивний режим).

Протокол FTP визначає запит-відповідь спосіб взаємодії між програмою-клієнтом і програмою-сервером.

Робота FTP на рівні користувача містить кілька етапів:

.Ідентифікація <https://uk.wikipedia.org/wiki/%D0%86%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D1%96%D0%BA%D0%B0%D1%86%D1%96%D1%8F_(%D1%96%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D1%96%D0%B9%D0%BD%D0%B0_%D0%B1%D0%B5%D0%B7%D0%BF%D0%B5%D0%BA%D0%B0)> клієнта

.Вибір каталогу розміщення файлів.

.Визначення режиму обміну (блоково, потоковий, ASCII або двійковий).

.Виконання команд обміну (get, mget, dir, mdel, mput або put).

.Завершення процедури (quit або close).має два режими з’єднання для обміну файлами, це:

1.      Активний режим

Дії сервера і клієнта:

1.Клієнт <https://uk.wikipedia.org/wiki/FTP-%D0%BA%D0%BB%D1%96%D1%94%D0%BD%D1%82> встановлює зв'язок і надсилає запит на 21 порт сервера з порту N (N> 1024)

.Сервер <https://uk.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D1%80> посилає відповідь на порт N (N> 1024) клієнта

.Сервер встановлює зв'язок для передачі даних по порту 20 на порт клієнта N +1

Схематично даний режим показано на рис.1.1.2.

Рис.1.1.2. Схема активного режиму роботи FTP

. Пасивний режим

Дії сервера і клієнта:

.Клієнт встановлює зв'язок і надсилає запит (повідомляє, що треба працювати в пасивному режимі) на 21 порт сервера з порту N (N> 1024)

.Сервер посилає відповідь і повідомляє номер порту для каналу даних P (P> 1024) на порт N (N> 1024) клієнта

.Клієнт встановлює зв'язок для передачі даних по порту N +1 на порт сервера P (P> 1024)

Схема роботи пасивного режиму показано на рис.1.3.

Рис.1.1.3. Пасивний режим роботи FTP

Активний FTP вигідний для FTP-сервера, але шкідливий для сторони клієнта. FTP сервер намагається з'єднатися з випадковими високими (за номером) портами на клієнті, таке з'єднання напевно буде блоковано брандмауером на стороні клієнта.

Пасивний FTP вигідний для клієнта, але шкідливий для FTP-сервера. Клієнт буде робити обидва з'єднання до сервера, але один з них буде до випадкового високому порту, таке з'єднання напевно буде блоковано брандмауером на стороні сервера.[1]

1.2    Аналіз існуючого програмного забезпечення FTP для ОС Windows

(File Transfer Protocol) - протокол, призначений для передачі файлів в комп’ютерних мережах. FTP дозволяє підключатися до серверів FTP, переглядати вміст каталогів і завантажувати файли з сервера або на сервер. FTP-клієнт - програма для спрощення доступу до FTP серверу. У залежності від призначення може надавати користувачеві простий доступ до віддаленого FTP-сервера в режимі текстової консолі або відображати файли на віддаленому сервері так ніби вони є частиною файлової системи комп’ютера користувача.[2]

Розглянемо основні FTP - програми для ОС Windows:[3] - найкращий серед безкоштовних FTP-менеджерів (програма для викачування і завантаження файлів на FTP сервер) для операційної системи Windows. Є підтримка функції Drag and Drop, забезпечується докачка файлів (якщо сервер це підтримує). На рисунку 1.2.1. зображено вікно даного FTP сервера

Рис.1.2.1.Вікно FileZilla

Основні можливості:

·        підтримує FTP, FTP під SSL/TLS (FTPS) і SSH File Transfer Protocol (SFTP);

·        робота в декілька потіків;

·        захист з’єднання (SSL);

·        відновлення з’єднання (Keep Alive);

·        визначення таймауту FTP-сервера;

·        багатомовний інтерфейс FileZilla (зокрема російський);

·        потужний менеджер сайтів і черги передачі файлів;

·        настройка лімітів швидкості; фільтр імен файлів;

·        помічник настройки конфігурації мережі;

·        аутентифікація і шифровка за допомогою KerberosFTP Server[4] (див. рис. 1.2.2)

Рис.1.2.2.Вікно Wing FTP Server

FTP Server - професійний FTP-сервер, що характеризується високою швидкістю, надійністю роботи і зручністю для користувачів. Він має приємний інтерфейс і зручне керування аккаунтом. Увімкнений монітор реального часу дозволяє перевірити навантаження на ваші сервера або навіть спостерігати за кожним користувачем, підключеним до сервера.FTP Server надає користувачам всю необхідну інформацію про сервер і файлах, що передаються, а також володіє великою кількістю налаштувань і можливостями зі зміни інтерфейсу програми.

Основні можливості WING FTP SERVER:

Підтримка протоколів FTP, FTPS (FTP під SSL), HTTP, HTTPS і SFTP.

Використання криптографічного модуля OpenSSL FIPS 140-2.

Адміністрування в веб-інтерфейсі.

Можливість використання безлічі серверів на одному IP.

Підтримка IPv6.

Підтримка Screen Reader для веб-клієнта.

Планувальник завдань.

Програмований менеджер подій.

Безліч типів аутентифікації.FTP Server [5] (див рис. 1.2.3)

Рис. 1.2.3. Вікно Golden FTP Server

FTP Server - персональний FTP сервер для Windows. Програма максимально проста і зручна у використанні з інтуїтивно зрозумілим багатомовним інтерфейсом. Golden FTP Server запускається автоматично при завантаженні Windows. Вам не потрібно яких-небудь особливих знань для використання програми. Файли додаються до списку загальних аналогічно стандартній дії «Відкрити файл» в Windows або просто з контестного меню. Ввімкнена підтримка декількох закачувань одночасно, а також відновлення завантаження після обриву зв’язку.

Основні можливості Golden FTP сервер: простий у використанні, багатомовний інтерфейс, вбудовується в контекстне меню Провідника, моніторинг активності користувача, інтелектуальний контроль за загальними ресурсами. Golden FTP Server має дві версії - платну, і безкоштовну для особистого користування.[6] (див рис. 1.2.4)

Рис. 1.2.4. Вікно TurboFTP

- надійний FTP клієнт з підтримкою FTP над SSL/TLS і SFTP над SSH2 та широкими функціональними можливостями. Він дозволяє проводити передачу даних з вашого комп’ютера на сервер і навпаки з незвичайною легкістю і надійним шифруванням. Програма має інтуїтивно зрозумілий і зручний інтерфейс.

За допомогою TurboFTP ви можете завантажувати файли сайтів на сервер, синхронізувати файли і виконувати корпоративні трансфери критичної важливості. Серед плюсів програми можна відзначити синхронізацію директорій парою кліків, стеження за буфером обміну, здатність передавати великі файли, підтримка SOCKS 4 і SOCKS 5, планувальник завдань і т. д.

Основні можливості TURBOFTP:

Модуль Sync Service для планування завдань синхронізації.

Автоматичне завантаження нових файлів на сервер.

Передача файлів захищена за допомогою SSL і TLS. Підтримує SFTP над SSH2 і шифрування паролів OTP S/Key.

Вбудований планувальник дозволяє планувати завдання з передачі файлів і автоматичної синхронізації.

Надсилання заздалегідь підготованого повідомлення на e-mail після виконання завдань.

Синхронізація папок на комп’ютері і на сервері із створенням резервних копій файлів і папок

Стиснення файлів «на льоту» з використанням MODE-Z. Можливість створення і розпаковування архівів Zip, GZip і Tar.

Підтримка серверів Firewall/Proxy, включно з HTTP Proxy, SOCKS 4/4a.

TurboFTP здатний працювати з файлами з розміром більшим ніж 2 Gb в файловій системі FAT32 і більше 4 Gb в NTFS.

1.3    Шляхи встановлення FTP-серверу в ОС Windows

- сервер - це підключений до інтернету, зазвичай постійно, комп’ютер, на якому встановлена спеціальна програма, що забезпечує доступ до файлів і тек цього комп’ютера по протоколу FTP.

Одним з найбільш поширених типів FTP - серверів є сервери загального, практично вільного, доступу. Такі сервери називаються анонімними(anonymous). При підключенні до анонімного сервера, як правило, логін і пароль вводити не вимагається. У ряді випадків, щоб підключитися до анонімного сервера вам доведеться ввести логін anonymous і довільний пароль. Слід зазначити, що навіть на анонімному сервері ви отримаєте доступ не до усіх його файлів і тек, а тільки до спеціальної, відведеної для цілей вільного доступу, теці.

Адреси(URL) FTP - серверів відрізняються від адрес HTTP - серверів і мають вигляд типу ftp ://ftp.ім’я_сервера.com.

Зрозуміло, FTP - сервер може знаходитися у будь-якій зоні, не лише .com, але і, скажімо, .ru або .org.

Наприклад: ftp://ftp.microsoft.com.

Протокол FTP і FTP - сервери виникли на зорі інтернету, тому зараз FTP - сервери - це величезне сховище інформації. З’явився навіть термін - FTP - архіви. На FTP- архівах зберігаються величезні колекції всіляких файлів : програм, текстів, зображень, звукових файлів і тому подібне

Отримати доступ до файлів на FTP - сервері можна з допомогою:

· браузеру, наприклад Internet Explorer;

· download- менеджера;

· FTP - клієнта для роботи в командному рядку(входить до складу Windows);

· за допомогою спеціалізованих програм, які називаються FTP - клієнтами(наприклад, FileZilla, SmartFTP)

Для того, щоб обмінюватись файлами за допомогою FTP протоколу також потрібно виділити комп’ютер? на якому буде розгорнутий FTP-server. ОС Windows дозволяє стандартними засобами розгорнути FTP-сервер на будь-якому комп’ютері. Для цього потрібно просто виконати ряд команд для налаштування і запуску FTP. Для розгортання FTP необхідно виконати наступні кроки:

.        Добавляємо компоненти ftp в середовище операційної системи. Для цього виконуємо команди: Панель керування - Програми - Програми та компоненти - Увімкнення та вимкнення засобів Windows. В відкритому меню встановлюємо компонент Internet Information Services та всі підкомпоненти (див. рис. 1.3.1).

Рис.1.3.1. Увімкнення компонентів FTP

.        Тепер необхідно запустити сервер. Для цього в Панелі керування вибираємо вкладку Адміністрування, а в ній Internet Information Services (IIS) Manager. Перед нами з’явиться вікно де в правій частині ми вибираємо вкладку sites і викликаємо контекстне меню (див. рис. 1.3.2)

Рис.1.3.2. Менеджер IIS

.       
В контекстному меню вибираємо пункт Add FTP Site. В новому вікні задаємо ім’я нашого FTP - сервера та шлях до місця на фізичному диску, який буде виступати в ролі сховища для файлів створеного FTP. (див. рис. 1.3.3)

Рис.1.3.3. Вікно введення відомостей про FTP

.        Далі визначаємо параметри запуску FTP-сервера (див. рис. 1.3.4)

Рис.1.3.4. Вікно визначення параметрів запуску FTP

.        Далі в Брандмаувері Windows потрібно включити два вхідних правила: FTP Server (FTP Traffic-In) та FTP Server Passive (див. рис. 1.3.5)

Рис.1.3.5. Включення правил вхідного трафіку FTP

.        Також в Брандмаувері включаємо правило для вихідного трафіку FTP (див. рис. 1.3.6)

Рис.1.3.6. Включення правил вихідного трафіку FTP

.        Далі необхідно створити нову групу локальних користувачів і створити користувачів, які входитимуть в цю групу і які зможуть підключатися до FTP сервера зі встановленими правами доступу.

.        Після створення групи в правилах аутентифікації задаємо права показані на рисунку 1.3.7

Рис.1.3.7. Вікно встановлення правил авторизації на FTP сервері

.        Також задамо правила авторизації для анонімних користувачів, так як показано на рисунку 1.3.8.

Рис.1.3.8. Вікно задання правил авторизації для анонімних клієнтів

На цьому налаштування FTP-сервера засобами ОС Windows завершено і ми можемо, за допомогою FTP-клієнта, підключитися до сервера FTP. Таким чином ми можемо розгорнути власний FTP-сервер стандартними засобами операційної системи Windows.

1.4    Постановка задачі


Головною задачею роботи є дослідження FTP-server операційної системи Windows. Для набуття практичних навичок в даній предметній області необхідно розробити додаток для ОС Windows, який дозволив би використовувати протокол FTP. Тому необхідно розробити програм, яка дозволяла під’єднуватись до FTP сервера створено в середовищі вказаної операційної системи. Додаток виступатиме в ролі FTP-клієнта і повинен виконувати основні команди спрямовані до сервера, зокрема:

.        Підключення до FTP сервера

.        Відображення файлів розміщених на сервері

.        Навігація по директоріям

.        Збереження файлів на комп’ютері, де запущена програма

.        Завантаження файлів на сервер

.        Видалення файлів з серверу

.        Видалення директорій із серверу

.        Створення директорій на сервері

Програма повинна виконувати всі поставлені цілі, при цьому вона повинна мати простий та зрозумілий інтерфейс, споживати мало ресурсів персонального комп’ютера та повинна запобігати виникнення помилок, за рахунок попередження неправильних дій користувача.

2. Розробка FTP клієнта для ОС Windows

 

.1 Опис мови та середовища програмування


Для розробки програмного забезпечення FTP-клієнта для ОС Windows було вибрано мову програмування С# та середовище програмування Microsoft Visual Studio 2017. Така комбінація дозволяє просто і швидко писати програми для даної операційної системи, оскільки вони максимально направлені на windows розробку. Опишемо загальні відомості про мову програмування та середовище розробки.

C#[7]- об'єктно-орієнтована <https://uk.wikipedia.org/wiki/%D0%9E%D0%B1%E2%80%99%D1%94%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D1%96%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F> мова програмування <https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B2%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F> з безпечною системою типізації <https://uk.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%82%D0%B8%D0%BF%D1%96%D0%B7%D0%B0%D1%86%D1%96%D1%97> для платформи .NET <https://uk.wikipedia.org/wiki/.NET>. Розроблена Андерсом Гейлсбергом <https://uk.wikipedia.org/wiki/%D0%90%D0%BD%D0%B4%D0%B5%D1%80%D1%81_%D0%93%D0%B5%D0%B9%D0%BB%D1%81%D0%B1%D0%B5%D1%80%D0%B3>, Скотом Вілтамутом <https://uk.wikipedia.org/w/index.php?title=%D0%92%D1%96%D0%BB%D1%82%D0%B0%D0%BC%D1%83%D1%82_%D0%A1%D0%BA%D0%BE%D1%82&action=edit&redlink=1> та Пітером Гольде <https://uk.wikipedia.org/w/index.php?title=%D0%93%D0%BE%D0%BB%D1%8C%D0%B4%D0%B5_%D0%9F%D1%96%D1%82%D0%B5%D1%80&action=edit&redlink=1> під егідою Microsoft Research <https://uk.wikipedia.org/wiki/Microsoft_Research> (при фірмі Microsoft <https://uk.wikipedia.org/wiki/Microsoft>).

Синтаксис <https://uk.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81> C# близький до С++ <https://uk.wikipedia.org/wiki/%D0%A1%2B%2B> і Java <https://uk.wikipedia.org/wiki/Java>. Мова <https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B2%D0%B0> має строгу статичну типізацію, підтримує поліморфізм <https://uk.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D1%96%D0%BC%D0%BE%D1%80%D1%84%D1%96%D0%B7%D0%BC_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F)>, перевантаження операторів, вказівники на функції-члени класів, атрибути, події, властивості, винятки <https://uk.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%BE%D0%B1%D0%BA%D0%B0_%D0%B2%D0%B8%D0%BD%D1%8F%D1%82%D0%BA%D1%96%D0%B2>, коментарі у форматі XML <https://uk.wikipedia.org/wiki/XML>. Перейнявши багато що від своїх попередників - мов С++ <https://uk.wikipedia.org/wiki/%D0%A1%2B%2B>, Delphi <https://uk.wikipedia.org/wiki/Delphi_(%D0%BC%D0%BE%D0%B2%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F)>, Модула <https://uk.wikipedia.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0&action=edit&redlink=1> і Smalltalk <https://uk.wikipedia.org/wiki/Smalltalk> - С#, спираючись на практику їхнього використання <https://uk.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D0%B0%D0%BD%D0%BD%D1%8F>, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем, наприклад множинне спадкування <https://uk.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B6%D0%B8%D0%BD%D0%BD%D0%B5_%D1%81%D0%BF%D0%B0%D0%B4%D0%BA%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F> класів (на відміну від C++).

Титульним компілятором <https://uk.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%96%D0%BB%D1%8F%D1%82%D0%BE%D1%80> C# є Microsoft Visual C# <https://uk.wikipedia.org/w/index.php?title=Microsoft_Visual_C&action=edit&redlink=1>.Visual Studio[8]- серія продуктів фірми Майкрософт <https://uk.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B9%D0%BA%D1%80%D0%BE%D1%81%D0%BE%D1%84%D1%82>, які включають інтегроване середовище розробки <https://uk.wikipedia.org/wiki/%D0%86%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5_%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%BE%D0%B2%D0%B8%D1%89%D0%B5_%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B8> програмного забезпечення та ряд інших інструментальних засобів. Ці продукти дозволяють розробляти як консольні програми <https://uk.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D0%B8%D0%B9_%D1%96%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%87%D0%B0>, так і програми з графічним інтерфейсом <https://uk.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D1%84%D1%96%D1%87%D0%BD%D0%B8%D0%B9_%D1%96%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81>, в тому числі з підтримкою технології Windows Forms <https://uk.wikipedia.org/w/index.php?title=Windows_Forms&action=edit&redlink=1>, а також веб-сайти <https://uk.wikipedia.org/wiki/%D0%92%D0%B5%D0%B1-%D1%81%D0%B0%D0%B9%D1%82>, веб-застосунки <https://uk.wikipedia.org/wiki/%D0%92%D0%B5%D0%B1-%D0%B7%D0%B0%D1%81%D1%82%D0%BE%D1%81%D1%83%D0%BD%D0%BE%D0%BA>, веб-служби <https://uk.wikipedia.org/wiki/%D0%92%D0%B5%D0%B1-%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D0%B0> як в рідному <https://uk.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4>, так і в керованому <https://uk.wikipedia.org/wiki/%D0%9A%D0%B5%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4> кодах для всіх платформ, що підтримуються Microsoft Windows <https://uk.wikipedia.org/wiki/Microsoft_Windows>, Windows Mobile <https://uk.wikipedia.org/wiki/Windows_Mobile>, Windows Phone <https://uk.wikipedia.org/wiki/Windows_Phone_8>, Windows CE <https://uk.wikipedia.org/wiki/Windows_CE>, .NET Framework <https://uk.wikipedia.org/wiki/.NET_Framework>, .NET Compact Framework <https://uk.wikipedia.org/wiki/.NET_Compact_Framework> та Microsoft Silverlight <https://uk.wikipedia.org/wiki/Microsoft_Silverlight>.

2.2 Опис компонентів програми


При написанні FTP клієнта доцільно розділити програмний модуль на дві частини: функціонал, що буде відсилати запити на сервер і отримувати та обробляти відповіді та функціонал, що реалізовуватиме графічну оболонку FTP-клієнта.

Оскільки сам функціонал ftp-клієнта ділиться на дві частини - графічну оболонку і функціонал для взаємодії з сервером ftp, то краще виділити даний функціонал в окремий клас.

Крім того, створимо окремий клас для парсинга одержуваної відповіді від ftp-сервера. Основна частина роботи програми буде вестися за допомогою класів FtpWebRequest і FtpWebResponse.- компонент (клас) мови С#, який дозволяє відправляти запити до FTP-сервера. Щоб отримати примірник FtpWebRequest, використовують Create метод. Можна також використовувати WebClient клас для відправки і завантаження відомостей з FTP-сервера. За допомогою цих підходів, при вказівці мережевого ресурсу, який використовує схему FTP (наприклад, "ftp://contoso.com") FtpWebRequest надає можливість програмно взаємодіяти з FTP-серверами.може бути відносним або абсолютним. Якщо URL має вигляд "ftp://contoso.com/path", то URL є абсолютним, і поточний каталог є / path.

Для з’єднання з FTP-сервером необхідно мати ім'я користувача і пароль до сервера або дозволити на сервері анонімний вхід. Можна вказати облікові дані, які використовуються для підключення до сервера, задавши Credentials властивості або включити їх в UserInfo частина URI, який передається Create метод.- компонент мови С#, який використовується для повернення відповіді FTP-сервера на відправлений до нього запит.

Екземпляр класу FtpWebResponse отримують шляхом виклику GetResponse методу. Поа=вернутий об'єкт повинен бути приведений до FtpWebResponse. Якщо програма не має FtpWebResponse викличить метод Close для звільнення ресурсів, що зберігаються в FtpWebResponse.містить код стану, повернутий сервером і StatusDescription властивість повертає код стану та повідомлення, яке описує стан. Значення, повернуті цим властивостем перетворюються в повідомлення, що повертається сервером.

Будь-які дані можуть бути повернуті в результаті запиту, наприклад: список імен файлів, що повертаються для ListDirectory запиту; список імен файлів доступних в потоці, повертаються GetResponseStream методом. Довжина потоку даних може бути отримана з властивості ContentLength.

2.3 Опис функцій програми


Основною задачею розроблюваної програми є під’єднання до FTP сервера та відправлення запитів до нього. Основні команди, які відправляються на сервер наведені в таблиці 2.3.1

Таблиця 2.3.1

Команда

Опис

RETR

ім'я файлу (взяти файл)

STOR

ім'я файлу (передати файл)

REST

маркер (для докачки вже частково скаченного файлу, зазвичай вказується зсув у байтах)

DELE

ім'я файлу, що видаляється

RMD ім'я

видаляється директорія

MKD ім'я

Створюється директорія

PWD

у відповіді вказати ім'я поточної директорії

LIST [ім'я директорії або файлу]

передати по з'єднанню даних список імен файлів в директорії або інформацію про фото

SYST

відповідь повинна містити тип ОС сервера і ін корисну інформацію

STAT

відповідь містить інформацію про поточний стан сервера; якщо команда видана в процесі передачі файлу і передуватиме посилкою сигналів telnet_а_IP і Synch, то відповідь д. містити інформацію про стан пересилання

STAT ім'я файлу

відповідь повинна містити інформацію про фото

HELP [ім'я команди]

опис роботи даної команди

NOOP

порожня команда


В нашій програмі реалізовані наступні команди:

.        Отримання списку файлів та директорій на сервері

.        Скачування файлів

.        Завантаження файлів на сервер

.        Видалення файлів та директорій

.        Створення директорії

Опишемо дані функції:

.        Функція ListDirectory призначена для отримання списку директорій та файлів розміщених на FTP сервері. Код даної функції наведено нижче:FileStruct[] ListDirectory(string path)

{(path == null || path == "")

{= "/";

}= (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path);.Credentials = new NetworkCredential(_UserName, _Password);

//команда LIST.Method = WebRequestMethods.Ftp.ListDirectoryDetails;.EnableSsl = _UseSSL;

//Получаємо вхідний потік= (FtpWebResponse)ftpRequest.GetResponse();

//зміна для збереження отриманої інформаціїcontent = "";sr = new StreamReader(ftpResponse.GetResponseStream(), System.Text.Encoding.ASCII);= sr.ReadToEnd();.Close();.Close();parser = new DirectoryListParser(content);parser.FullListing;

Функція отримує параментром шлях на FTP, створює з’єднання з ним, виконує команду LIST та з отриманих даних утворює структуру даних про файли та директорії на сервері

.        Функція DownloadFile виконує завантаження вибраного файлу із сервера

//метод протокола FTP RETR для завантаження файла с FTP-сервераvoid DownloadFile(string path, string fileName)

{= (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path + "/" + fileName);.Credentials = new NetworkCredential(_UserName, _Password);

//команда RETR.Method = WebRequestMethods.Ftp.DownloadFile;.EnableSsl = _UseSSL;

//Файли зберігатимуться в каталог програмиdownloadedFile = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);= (FtpWebResponse)ftpRequest.GetResponse();

//Получаємо вхідний потікresponseStream = ftpResponse.GetResponseStream();

//Буфер для зчитуваних даних[] buffer = new byte[1024];size = 0;((size = responseStream.Read(buffer, 0, 1024)) > 0)

{.Write(buffer, 0, size);

}.Close();.Close();.Close();

}

Дана функція в параметрах отримує шлях та ім’я файлу на сервері, виконує підключення до FTP, виконує команду RETR.

.        Функція UploadFile завантажує вказаний файл на сервер

//метод протокола FTP STOR для загрузки файла на FTP-серверvoid UploadFile(string path, string fileName)

{

//змінна для імені файлаshortName = fileName.Remove(0, fileName.LastIndexOf("\\" ) + 1);uploadedFile = new FileStream(fileName, FileMode.Open, FileAccess.Read);= (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path + shortName);.Credentials = new NetworkCredential(_UserName, _Password);.EnableSsl = _UseSSL;.Method = WebRequestMethods.Ftp.UploadFile;

//Буфер для завантажуваних данных[] file_to_bytes = new byte[uploadedFile.Length];

//Зчитуємо дані в буфер.Read(file_to_bytes, 0, file_to_bytes.Length);.Close();

//Поток для загрузки файлаwriter = ftpRequest.GetRequestStream();.Write(file_to_bytes, 0, file_to_bytes.Length);.Close();

}

Функція в параметрах отримує шлях та ім’я файлу на локальному комп’ютері, виконує підключення до FTP, виконує команду STOR.

.        Функція DeleteFile видаляє вказаний файл із сервера

//метод протокола FTP DELE для видалення файла с FTP-сервераvoid DeleteFile(string path)

{= (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path);.Credentials = new NetworkCredential(_UserName, _Password);.EnableSsl = _UseSSL;.Method = WebRequestMethods.Ftp.DeleteFile;ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();.Close();

}

Функція отримує в параметрах шлях до файлу та виконує команду до FTP-сервера - DELE

.        Функція CreateDirectory створює нову директорію на FTP-сервері

//метод протокола FTP MKD для створення каталога на FTP-серверіvoid CreateDirectory(string path, string folderName)

{ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path + folderName);.Credentials = new NetworkCredential(_UserName, _Password);.EnableSsl = _UseSSL;.Method = WebRequestMethods.Ftp.MakeDirectory;ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();.Close();

}

Ця функція отримує параметром шлях та ім’я нової директорії та створює нову папку на FTP-сервері.

Повні лістинги програми наведені в Додатку А та Б.

3. Аналіз реалізованої програми FTP-клієнта

 

.1 Тестовий запуск та опис програми


Розроблювальний нами програмний продукт призначений для підключення до FTP сервера та відправки основних команд. Програма виступає в ролі FTP клієнта і виконує ряд функцій:

         Відображення файлів та директорій на сервері

         Навігація по директоріям

         Скачування, видалення та завантаження файлів

         Видалення та створення директорій

Програма запускається за допомогою файлу FtpClient.exe і не потребує встановлення, достатньо просто перемістити програму на комп’ютер та запустити.

Запустивши програми ми побачимо головне вікно де зверху ми повинні ввести в текстові поля потрібні параметри для підключення до FTP, зокрема: адресу FTP-сервера, ім’я користувача (login) та пароль. Головне вікно програми показано на рисунку 3.1.1

Рис.3.1.1 Головне вікно програми

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

Після підключення ми отримаємо список файлів розміщених на сервері (див. рис. 3.1.1)

Рис.3.1.2. Відображення файлів на FTP

Тепер ми можемо виконувати основні операції описані вище. Дані операції доступні з контекстного меню, яке викликається натисненням на праву клавішу миші. Контекстне меню зображено на рисунку 3.1.3

Рис.3.1.3 Контекстне меню

Як видно з рисунку, ми можемо зберегти файл із серверу на наш комп’ютер. Для цього виділяємо потрібний файл і виконуємо команду Зберегти файл. Файл автоматично збережеться в поточну директорію. Після успішного збереження покажеться сповіщення про успішне виконання операції (див. рис. 3.1.4)

Рис.3.1.4. Сповіщення про успішне виконання операції

Програма дозволяє уникати помилок за рахунок попередження неправильних дій користувача. Для прикладу, якщо користувача викличе команду Зберегти файл, попередньо не виділивши потрібний файл, з’явиться сповіщення, що потрібно виділити файл. Дане сповіщення показано на рисунку 3.1.5

Рис.3.1.5 Сповіщення про некоректні дії

Висновки


В ході виконання курсового проекту з дисципліни «Комп’ютерні мережі» було досліджено роботу FTP сервера в середовищі операційної системи Windows, розроблено та протестовано додаток FTP-клієнта для даної ОС, який дозволяє виконувати наступні оперції: під’єднуватись до FTP-сервера; переглядати списки файлів та директорій сервера, створювати нові директорії на сервері, зберігати файли із FTP на власний комп’ютер, завантажувати файли на FTP та видаляти файли із сервера. Курсовий проект складався із трьох частин.

Перша частина - аналіз предметної області, де було досліджено теоретичні відомості про принципи функціонування FTP протоколу, FTP-серверів та принципи взаємодії між FTP сервером та FTP клієнтом.

Друга частина курсової роботи грунтувалась на власній розробці програмного забезпечення по предметній області. В результаті було розроблено windows-додаток FTP-клієнта.

Третя частина полягала в описі результатів роботи розробленого програмного забезпечення. В даній частині роботі було описано програму FTP клієнта та проведено її тестовий запуск і перевірка на працездатність.

Курсовий проект дозволив закріпити теоретичні знання по вибраній предметній області - «Розробка FTP-servers для ОС Windows».

Список використаної літератури


1.      FTP [Електронний ресурс] - Режим доступу: https://uk.wikipediа.org/wiki/FTP <https://uk.wikipedia.org/wiki/FTP>

.        Програми для роботи з FTP [Електронний ресурс] - Режим доступу: <http://programy.com.ua/ua/ftp/>

.        FileZilla - бесплатный FTP клиент [Електронний ресурс] - Режим доступу: <http://filezilla.ru/>

.        Wing FTP Server [Електронний ресурс] - Режим доступу: <http://programy.com.ua/ua/Wing_FTP_Server/>

.        Golden FTP Server [Електронний ресурс] - Режим доступу: <http://programy.com.ua/ua/Golden_FTP_Server/>

.        TurboFTP [Електронний ресурс] - Режим доступу: <http://programy.com.ua/ua/TurboFTP/>

.        C Sharp [Електронний ресурс] - Режим доступу: <https://uk.wikipedia.org/wiki/C_Sharp>

.        Microsoft Visual Studio [Електронний ресурс] - Режим доступу: <https://uk.wikipedia.org/wiki/Microsoft_Visual_Studio>

Додаток А. Лістинг класу FtpClient


using System;System.Collections.Generic;System.Linq;System.Text;System.Net;System.IO;System.Text.RegularExpressions;FTP_client

{FtpClient

{string _Host;//ім'я FTPstring _UserName;//логінstring _Password;//парольftpRequest;//об'єкт для запитівftpResponse;//об'єкт для відповідей сервераbool _UseSSL = false;string Host

{

{_Host;

}

{

_Host = value;

}

}string UserName

{

{_UserName;

}

{

_UserName = value;

}

}string Password

{

{_Password;

}

{

_Password = value;

}

}bool UseSSL

{

{_UseSSL;

}

{

_UseSSL = value;

}

}

//Команда LIST для отримання списка файлів на FTP-серверіFileStruct[] ListDirectory(string path)

{(path == null || path == "")

{= "/";

}= (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path);.Credentials = new NetworkCredential(_UserName, _Password);

//команда LIST.Method = WebRequestMethods.Ftp.ListDirectoryDetails;.EnableSsl = _UseSSL;

//Получаємо вхідний потік= (FtpWebResponse)ftpRequest.GetResponse();

//зміна для збереження отриманої інформаціїcontent = "";sr = new StreamReader(ftpResponse.GetResponseStream(), System.Text.Encoding.ASCII);= sr.ReadToEnd();.Close();.Close();parser = new DirectoryListParser(content);parser.FullListing;

}

//метод протокола FTP RETR для завантаження файла с FTP-сервераvoid DownloadFile(string path, string fileName)

{= (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path + "/" + fileName);.Credentials = new NetworkCredential(_UserName, _Password);

//команда RETR.Method = WebRequestMethods.Ftp.DownloadFile;.EnableSsl = _UseSSL;

//Файли зберігатимуться в каталог програмиdownloadedFile = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);= (FtpWebResponse)ftpRequest.GetResponse();

//Получаємо вхідний потікresponseStream = ftpResponse.GetResponseStream();

//Буфер для зчитуваних даних[] buffer = new byte[1024];size = 0;((size = responseStream.Read(buffer, 0, 1024)) > 0)

{.Write(buffer, 0, size);

}.Close();.Close();.Close();

}

//метод протокола FTP STOR для загрузки файла на FTP-серверvoid UploadFile(string path, string fileName)

{

//змінна для імені файлаshortName = fileName.Remove(0, fileName.LastIndexOf("\\" ) + 1);uploadedFile = new FileStream(fileName, FileMode.Open, FileAccess.Read);= (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path + shortName);.Credentials = new NetworkCredential(_UserName, _Password);.EnableSsl = _UseSSL;.Method = WebRequestMethods.Ftp.UploadFile;

//Буфер для завантажуваних данных[] file_to_bytes = new byte[uploadedFile.Length];

//Зчитуємо дані в буфер.Read(file_to_bytes, 0, file_to_bytes.Length);.Close();

//Поток для загрузки файлаwriter = ftpRequest.GetRequestStream();.Write(file_to_bytes, 0, file_to_bytes.Length);.Close();

//метод протокола FTP DELE для видалення файла с FTP-сервераvoid DeleteFile(string path)

{= (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path);.Credentials = new NetworkCredential(_UserName, _Password);.EnableSsl = _UseSSL;.Method = WebRequestMethods.Ftp.DeleteFile;ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();.Close();

}

//метод протокола FTP MKD для створення каталога на FTP-серверіvoid CreateDirectory(string path, string folderName)

{ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path + folderName);.Credentials = new NetworkCredential(_UserName, _Password);.EnableSsl = _UseSSL;.Method = WebRequestMethods.Ftp.MakeDirectory;ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();.Close();

}

//метод протокола FTP RMD для видалення каталога с FTP-сервераvoid RemoveDirectory(string path)

{filename = path;ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://" + _Host + path);.Credentials = new NetworkCredential(_UserName, _Password);.EnableSsl = _UseSSL;.Method = WebRequestMethods.Ftp.RemoveDirectory;ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();.Close();

}

}

//Структура для збереження інформації про фалиstruct FileStruct

{string Flags;string Owner;bool IsDirectory;string CreateTime;string Name;

}enum FileListStyle

{,,

}

//Клас для парсингуclass DirectoryListParser

{List<FileStruct> _myListArray;FileStruct[] FullListing

{

{_myListArray.ToArray();

}

}FileStruct[] FileList

{

{<FileStruct> _fileList = new List<FileStruct>();(FileStruct thisstruct in _myListArray)

{(!thisstruct.IsDirectory)

{

_fileList.Add(thisstruct);

}

}_fileList.ToArray();

}

}FileStruct[] DirectoryList

{

{<FileStruct> _dirList = new List<FileStruct>();(FileStruct thisstruct in _myListArray)

{(thisstruct.IsDirectory)

{

_dirList.Add(thisstruct);

}

}_dirList.ToArray();

}

}DirectoryListParser(string responseString)

{

_myListArray = GetList(responseString);

}

List<FileStruct> GetList(string datastring)

{<FileStruct> myListArray = new List<FileStruct>();[] dataRecords = datastring.Split('\n');

//Отримуємо стиль запису на сервері_directoryListStyle = GuessFileListStyle(dataRecords);(string s in dataRecords)

{(_directoryListStyle != FileListStyle.Unknown && s != "")

{f = new FileStruct();.Name = "..";(_directoryListStyle)

{FileListStyle.UnixStyle:= ParseFileStructFromUnixStyleRecord(s);;FileListStyle.WindowsStyle:= ParseFileStructFromWindowsStyleRecord(s);;

}(f.Name != "" && f.Name != "." && f.Name != "..")

{.Add(f);

}

}

}myListArray;

}

//Парсинг, якщо фтп сервер працює на WindowsFileStruct ParseFileStructFromWindowsStyleRecord(string Record)

{

//Якщо стиль 02-03-04 07:46PM <DIR> Appendf = new FileStruct();processstr = Record.Trim();

//Отримуємо датуdateStr = processstr.Substring(0, 8);= (processstr.Substring(8, processstr.Length - 8)).Trim();

//Отримуємо часtimeStr = processstr.Substring(0, 7);= (processstr.Substring(7, processstr.Length - 7)).Trim();.CreateTime = dateStr + " " + timeStr;

//Перевіряємо чи папка(processstr.Substring(0, 5) == "<DIR>")

{.IsDirectory = true;= (processstr.Substring(5, processstr.Length - 5)).Trim();

}

{[] strs = processstr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);= strs[1];.IsDirectory = false;

}

//Решта стрічки ц імя каталога/файла.Name = processstr;f;

}

//Отримуємо, на якій ОС працює серверFileListStyle GuessFileListStyle(string[] recordList)

{(string s in recordList)

{

//Якщо умова виконується, то використовуємо стиль Unix(s.Length > 10

&& Regex.IsMatch(s.Substring(0, 10), "(-|d)((-|r)(-|w)(-|x)){3}"))

{FileListStyle.UnixStyle;

}

//Інакшше стиль Windowsif (s.Length > 8

&& Regex.IsMatch(s.Substring(0, 8), "[0-9]{2}-[0-9]{2}-[0-9]{2}"))

{FileListStyle.WindowsStyle;

}

}FileListStyle.Unknown;

}

//Якщо сервер працює на nix-ахFileStruct ParseFileStructFromUnixStyleRecord(string record)

{

//Запис має формат: dr-xr-xr-x 1 owner group 0 Nov 25 2002 bussysf = new FileStruct();(record[0] == '-' || record[0] == 'd')

{// правильний запис файлаprocessstr = record.Trim();.Flags = processstr.Substring(0, 9);.IsDirectory = (f.Flags[0] == 'd');= (processstr.Substring(11)).Trim();

//відрізаємо непотрібну частину імені файлу

_cutSubstringFromStringWithTrim(ref processstr, ' ', 0);.Owner = _cutSubstringFromStringWithTrim(ref processstr, ' ', 0);.CreateTime = getCreateTimeString(record);

//Індекс початку назви файлуfileNameIndex = record.IndexOf(f.CreateTime) + f.CreateTime.Length;

//Імя файла.Name = record.Substring(fileNameIndex).Trim();

}

{.Name = "";

}f;

}string getCreateTimeString(string record)

{

//Отримуємо часmonth = "(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)";space = @"(\040)+";day = "([0-9]|[1-3][0-9])";year = "[1-2][0-9]{3}";time = "[0-9]{1,2}:[0-9]{2}";dateTimeRegex = new Regex(month + space + day + space + "(" + year + "|" + time + ")", RegexOptions.IgnoreCase);match = dateTimeRegex.Match(record);match.Value;

}string _cutSubstringFromStringWithTrim(ref string s, char c, int startIndex)

{pos1 = s.IndexOf(c, startIndex);retString = s.Substring(0, pos1);= (s.Substring(pos1)).Trim();retString;

}

}

}

 

Додаток Б. Лістинг головного модуля

System;System.Collections.Generic;System.ComponentModel;System.Data;System.Net;System.Text;System.Windows.Forms;System.Net.Sockets;System.IO;

//Пространство имен программыFTP_client;FTP_client

{partial class Form1 : Form

{Form1()

{();

}ftp = new FtpClient();serverDir = "";void Form1_Load(object sender, EventArgs e)

{menu = new ContextMenuStrip();.Items.Add("Зберегти файл");.Items[0].Click += new EventHandler(Download_File);.Items.Add("Завантажити файл на сервер");.Items[1].Click += new EventHandler(Upload_File);.Items.Add("Видалити каталог");.Items[2].Click += new EventHandler(Remove_Directory);.Items.Add("Видалити файл");.Items[3].Click += new EventHandler(Delete_File);.ContextMenuStrip = menu;

}

//Подключение к фтп-серверуvoid button1_Click(object sender, EventArgs e)

{(textBox1.Text == null)

{.Show("Ім'я сервера не може бути порожнім");;

}.Host = textBox1.Text;.UserName = textBox2.Text;.Password = textBox3.Text;[] FileList = ftp.ListDirectory("");

{.Text = "Підключення до ftp-серверу...";(FileStruct s in FileList)

{lvi = new ListViewItem();.Text = s.Name;.SubItems.Add(s.CreateTime);.Items.Add(lvi);

}

}(Exception ex)

{.Show(ex.Message);

}.Text = "FTP клієнт";

}

//Отримання файлів в виділеній папціvoid listView2_MouseDoubleClick(object sender, MouseEventArgs e)

{(listView2.SelectedItems[0] == null)

{.Show("Виділіть папку для перегляту");

}

{.Text = "Підключення до ftp-серверу..";directory = listView2.SelectedItems[0].SubItems[0].Text.Trim();.Items.Clear();[] FileList = ftp.ListDirectory("/" + directory);.Text = "Підключення до ftp-серверу..";(FileStruct s in FileList)

{lvi = new ListViewItem();.Text = s.Name;.SubItems.Add(s.CreateTime);.Items.Add(lvi);

}.Text += ("/" + directory);+= ("/" + directory);

}(Exception ex)

{.Show(ex.Message);

}.Text = "FTP клієнт";

}void Delete_File(object sender, EventArgs e)

{(listView2.SelectedItems[0] == null)

{.Show("Виділіть файл для видалення");

}

{directory = listView2.SelectedItems[0].SubItems[0].Text.Trim();.DeleteFile(serverDir + "/" + directory);

}(Exception ex)

{.Show(ex.Message);

}

}void Remove_Directory(object sender, EventArgs e)

{(listView2.SelectedItems[0] == null)

{.Show("Виділіть файл для видалення");

}

{directory = listView2.SelectedItems[0].SubItems[0].Text.Trim();.RemoveDirectory(serverDir + "/" + directory);

}(Exception ex)

{.Show(ex.Message);

}

}void Download_File(object sender, EventArgs e)

{(listView2.SelectedItems[0] == null)

{.Show("Видільть файл для завантаження");

}

{directory = listView2.SelectedItems[0].SubItems[0].Text.Trim();.DownloadFile(serverDir, directory);.Show("Файл завантажено в кореневий каталог");

}(Exception ex)

{.Show(ex.Message);

}

}void Upload_File(object sender, EventArgs e)

{(openFileDialog1.ShowDialog() == DialogResult.Cancel) return;file = openFileDialog1.FileName;

{.UploadFile(serverDir, file);

}(Exception ex)

{.Show(ex.Message);

}

}

}

}

Похожие работы на - Розробка FTP-server для ОС Windows

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!