Курсовая работа по дисциплине «Сети ЭВМ и средства телекоммуникации» на тему «ftp клиент с возможностью использования для нестабильн - shikardos.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Пояснительная записка к курсовой работе по дисциплине: «Сети ЭВМ... 1 123.37kb.
Приобретение права использования программы для ЭВМ («Business Studio») 1 86.9kb.
Курсовая работа по дисциплине "Мировая экономика" на тему: " особенности... 4 1232.31kb.
Курсовая работа по учебной дисциплине: Информатика на тему: Компьютерная... 1 239.08kb.
Анализ пакетов локальной сети Лабораторная работа №5 по курсу «Сети... 1 40.99kb.
Рабочая программа по дисциплине: «Схемотехника эвм» Цикл: специальные... 1 262.67kb.
Курсовая работа на тему: Кэш-память практическое задание: Дефрагментация... 3 590.57kb.
Лекция №4 По дисциплине Теория информации 1 81.71kb.
Курсовая работа по дисциплине: " Рынок Ценных Бумаг и Биржевое Дело"... 6 1263.09kb.
Исследовательская часть работы. «Разработка интеллектуального программного... 1 88.53kb.
Курсовая работа по дисциплине международное право на тему: " Понятие... 1 207.73kb.
Gerard Beekmans Linux From Scratch Пролог 12 3817.48kb.
- 4 1234.94kb.
Курсовая работа по дисциплине «Сети ЭВМ и средства телекоммуникации» на тему «ftp - страница №1/1


Министерство образования Российской Федерации

Московский государственный институт электроники и математики

(технический университет)

Кафедра электронно-вычислительной аппаратуры

Курсовая работа по дисциплине

«Сети ЭВМ и средства телекоммуникации»

на тему


«FTP клиент с возможностью использования для нестабильных каналов связи»
Выполнил: студент группы С-64

Савельев А. Л.

Проверил: преподаватель

Грунау А. Б.


Москва 2007

Аннотация


В данной работе требовалось разработать программу «FTP клиент с возможностью использования для нестабильных каналов связи» на языке программирования C++ для ОС Linux.

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




Содержание


Аннотация 3

Содержание 4

Техническое задание 5

Анализ технического задания 6

Теоретическое введение 7

Практическая часть 9

Пример выполнения 11

Выводы 13

Список источников 14




Техническое задание


Написать на языке программирования C++ для ОС Linux программу FTP клиент. Программа должна работать в консольном режиме. В программе реализовать возможность её использования для нестабильных каналов связи.

Анализ технического задания


Для решения поставленной задачи требуется последовательно ответить на следующие вопросы:

1) Каким образом организуется соединение с удаленным компьютером посредством системных вызовов Linux?

2) Каков принцип работы FTP протокола?

3) Какую логическую структуру выбрать для программы?


Теоретическое введение


  1. Используемые системные вызовы:

int socket (int domain, int type, int protocol);

Этот системный вызов служит для создания очередей, предназначенных для приёма и отправки данных.

domain :

PF_INET для использования протоколов семейства IPv4

type :

SOCK_STREAM протокол последовательной передачи данных с подтверждением доставки (TCP)



protocol :

детализирует аргумент type. В большинстве случаев, как и в данном, protocol=0



uint16_t htons (uint16_t hostnum);

Этот системный вызов служит для преобразования 16-битного числа hostnum в аппаратно-независимое представление



int setsockopt (int socket_fd, int level, int option, const void* value, socklen_t value_len);

Этот системный вызов служит для задания параметров для сокета

socket_fd :

файловый дескриптор сокета

level:

уровень протокола (для манипуляции параметрами на уровне сокета задаётся уровень SOL_SOCKET)



option :

имя параметра (для задания максимального времени ожидания требуется передать параметр SO_RCVTIMEO)

value :

значение параметра



value_len:

размер параметра



int connect (int sockrt_fd, const struct sockaddr* sa, socketlen_t sock_len);

Этот системный вызов служит для установления соединения.

socket_fd :

файловый дескриптор сокета

*sa :

адрес сокета



sa_len :

длина адреса



  1. Протокол FTP устроен следующим образом:

1. Клиент соединяется с сервером, устанавливая управляющее соединение.

2. Клиент пишет в управляющий поток команды, которые принимаются FTP сервером и им же интерпретируются.

3. Клиент принимает из управляющего потока ответ от FTP сервера.

4. Если для выполнения команды требуется передача не управляющей информации, то клиент устанавливает второе соединение (информационное) и с помощью него передаётся требуемая информация.

Основные команды протокола FTP (записываются в управляющий поток) :

CWD изменить рабочий каталог

LIST [ ] вывод списка файлов или каталогов

PASS пароль пользователя

USER <[name]> идентифицирует пользователя



PASV перевести сервер в режим прослушивания информационного порта на предмет установления соединения

PWD выдать имя текущего каталога

QUIT разорвать текущее соединение (управляющее и / или информационное)

REST возобновление обмена, начиная с size_shift байта

RETR сервер отсылает копию filename

STOR сервер должен запомнить полученные данные в виде filename

STOU аналог команды STOR. Записывает файл на сервер и присваивает файлу уникальное имя

TYPE специфицирует тип информации

это пробел. Каждая команда, записываемая в сокет, должна заканчиваться последовательностью символов \r\n (перевод каретки, перевод строки).

3) Для данной программы выбрана следующая логическая структура:

Разрабатываются два класса: FtpBase, FtpClient.

Граф классов:


FtpBase


FtpClient


FtpClient закрыто наследуется от класса FtpBase. Разделение на два класса сделано с целью отделения сетевой части программы, реализованной в FtpBase, от части лексического анализа передаваемой командной строки, манипуляции метаданными для команды get, выполнения команд, вывода результатов их выполнения, реализованной в FtpClient. Наследование сделано закрытым, чтобы для экземпляра класса FtpClient нельзя было вызвать открытые методы класса FtpBase. Т. о. в классе FtpClient для использования доступны только функция, в которую передаётся командная строка и функции, служащие для формирования префикса командной строки.

Подобное разделение позволяет на основе FtpBase проектировать различные интерфейсы для FtpBase, в зависимости от задачи.

Практическая часть


Класс FtpBase:

public:

FtpBase(void);

Конструктор класса



bool connect(string serv_name);

Установление соединения с сервером serv_name



void disconnect(bool flg);

Разрывает соединение с сервером



bool login(string login, string password);

Регистрация на сервере



string getServName(void) const;

Возвращает имя сервера



string getUsrName(void) const;

Возвращает имя пользователя



string commandLsR(string str_param, string str_f);

Получает и список файлов для пути str_f с сервера и возвращает его



string commandPwdR(void);

Возвращает путь к текущему каталогу



bool commandCdR(string str);

Изменяет текущий каталог на str



SGet commandGet(string str_remoute_f_path, int shift, string str_local_path, string postfix="_FTP_");

Запрашивает файл str_remoute_f_path у сервера со сдвигом в shift байт и записывает его в каталог str_local_path под уникальным именем. Предусмотрена возможность докачки.



int commandPut(string str_local_f_path, string str_remoute_path);

Записывает локальный файл str_local_f_path в каталог str_remoute_path на сервер



~FtpBase(void);

Деструктор класса


private:

bool connectToServer(const char* serv_name, int port);

Служит для установки соединения с сервером serv_name по порту port



string getControlAnswer(void);

Получает управляющую информацию от сервера и возвращает её.



int getRetCode(string& str_ret);

Извлекает код возврата из строки str_ret и возвращает его



bool successCommand(string command,int ok_code_ret);

Выполняет команду и проверяет её успешность по предполагаемому коду возврата ok_code_ret



bool getPasvMode(void);

Переход в пассивный режим (т.е. установление информационного соединения)



string itoa_f(int arg);

Перевод из числа в строку

Команды, реализованные в виде методов, выполняются для удалённого компьютера
Класс FtpClient:

public:

FtpClient(string file_get="get_info_part");

Конструктор класса. Параметр file_get задаёт название файла, в котором будет храниться метаинформация для метода commandGet().



void executeCmd(string str_cmd);

Выполняет команду cmd для удалённого компьютера, вызывая соответствующую функцию, и для локального компьютера, выполняя её вызовом system()



string getServName(void) const;

Возвращает имя сервера



string getUsrName(void) const;

Возвращает имя пользователя


private:

void exConnect(void);

void exPwdr(void);

void exLsr(void);

void exCdr(void);

void exPut(void);

void exGet(void);

Функции, разбирающие командную строку и выполняющие соответствующие команды для удалённого компьютера



void rmLine(int n);

Удаление строки номер n из файла, предназначенного для хранения метаинформации для команды commandGet().



Функция main():

В функции main() происходит:

1) Чтение командной строки и вызов метода executeCmd() для предварительно созданного экземпляра класса FtpClient.

2) Установка префикса командной строки.


Пример выполнения


ftp> connect anonymous@ftp.omsk.net.ru qwe@li.ru

connection Ok

registration Ok

anonymous@ftp.omsk.net.ru> ls

etc/ incoming/ pub/

anonymous@ftp.omsk.net.ru> cd pub/Fengler_delete_25_04_07/Pictures/

anonymous@ftp.omsk.net.ru> pwd

/pub/Fengler_delete_25_04_07/Pictures

anonymous@ftp.omsk.net.ru> get 12.JPG ./

56.2774 %

error: connection failed; part stored

anonymous@ftp.omsk.net.ru> lls

12.JPG ftpcl get_info_part

anonymous@ftp.omsk.net.ru> lcat get_info_part

ftp.omsk.net.ru /pub/Fengler_delete_25_04_07/Pictures/12.JPG /home/guest/2009/Andrey.Savelyev/networks/ftp/exe/12.JPG 70846

anonymous@ftp.omsk.net.ru> get 12.JPG ./

100.0000 %

transfer complite

anonymous@ftp.omsk.net.ru> lls

12.JPG ftpcl get_info_part

anonymous@ftp.omsk.net.ru> connect anonymous@ftp.mbit.ru qwe@li.ru

connection Ok

registration Ok

anonymous@ftp.mbit.ru> cd incoming

anonymous@ftp.mbit.ru> pwd

/incoming

anonymous@ftp.mbit.ru> cd tmp_

anonymous@ftp.mbit.ru> ls

10.jpg 11.jpg.1 group

11.jpg 3.jpg group.1

anonymous@ftp.mbit.ru> lls

12.JPG ftpcl get_info_part

anonymous@ftp.mbit.ru> put ./12.JPG ./

100.0000 %

transfer complite

anonymous@ftp.mbit.ru> ls

10.jpg 11.jpg.1 3.jpg group.1

11.jpg 12.JPG group

anonymous@ftp.mbit.ru> pwd

/incoming/tmp_

anonymous@ftp.mbit.ru> --help

FTP клиент ftpcl. Реализованы базовые операции для работы с ftp.

Команды:

Для удалённого компьютера:

connect usr_name@host_addr password : устанавливает соединение с

сервером host_addr для пользователя usr_name

с паролем password

ls [-l][path] : выводит список каталогов и файлов заданной папки

pwd : выводит абсолютный путь к текущему каталогу

cd
: изменяет текущий каталог на path

get

: скачивает файл path_r_f в локальный



каталог path_l (возможна докачка)

put


: закачивает файл path_l_f в удалённый

каталог path_r

quit : разрывает текущее соединение

exit : разрывает текущее соединение и завершает работу

--help : выводит данное сообщение

Для локального компьютера:

для выполнения локальной команды надо ввести её с префиксом l

Выводы


Результатом данной работы является программа FTP клиент, написанная на языке программирования C++ для ОС Linux и работающая из командной строки. В ней реализованы следующие команды:

ls, pwd, cd , put ,get, quit, exit, connect, --help

ls – печатает на экране список каталогов и файлов по указанному пути

pwd – печатает абсолютный путь к текущему каталогу

cd – изменяет текущий каталог на указанный

put – загружает файл на FTP сервер

get – скачивает файл с FTP сервера

quit – разрывает текущее соединение без завершения работы программы

exit – разрывает текущее соединение и завершает работу программы

connect – для установления соединения с FTP сервером

--help – выдает сообщение об использовании
Также доступны команды используемой командной оболочки. Для выполнения такой команды требуется дописать префикс l.

Логическая структура данной программы позволяет использовать разработанные классы в других программах.



Недостатком данной программы является реализация неполного списка команд FTP протокола.

Список источников


  • Ш. Уолтон “Создание сетевых приложений в среде Linux”

  • Марк Дж. Рочкинд “Программирование для Unix”.

  • Бьерн Страуструп “Язык программирования C++”

  • http://book.itep.ru/4/45/ftp_454.htm