Клиент-серверное приложение для нахождения корней квадратного уравнения. Варианты реализации протокола, страница 2

http://citforum.univ.kiev.ua/book/cook/winsock.shtml

~tcp_getfile

Разработать клиентскую и серверную части ПО для передачи файлов с сервера на клиент по запросу клиента.

Использовать в качестве транспорта протокол надежной передачи с установлением соединения TCP.

Серверная часть принимает и обрабатывает входящие запросы последовательно.

Разработанный прикладной протокол передачи и пользовательский интерфейс должны предусматривать корректные обработку ошибок, например таких, как "Файл не найден на стороне сервера".

Дополнительные требования:

Пользовательский интерфейс сервера: командная строка

Пример вызова: ./ft_server 12345

где 12345 - номер порта.

Сервер запускается и входит в бесконечный цикл обработки запросов.

Пользовательский интерфейс клиента: командная строка

Пример вызова: ./ft_client 127.0.0.1 12345 remote_folder/remote_file.txt local.txt

где 127.0.0.1 12345 - сокет сервера,

remote_folder/remote_file.txt - что скачать с сервера,

local.txt - куда сохранить локально.

Инструменты: язык ANSI C, набор вызовов socket API / POSIX

~auth_server

Разработать сервер аутентификации.

Сервер должен принимать запрос в виде UDP датаграммы, сформированной по определенному протоколу и содержащей имя пользователя и пароль.  Сервер должен отвечать в виде UDP датаграммы с результатом аутентификации (да|нет).

Аутентификация производится на основе базы данных

(например, в виде текстового файла) на стороне сервера.

В базе должны храниться только дайджесты паролей.

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

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

Инструменты: язык ANSI C, набор вызовов socket API / POSIX

~backup_server

Разработать клиент-серверное приложение для резервного копирования файлов.

Клиентская часть сканирует указанную папку (вызовы opendir(), readdir())

и сравнивает ее содержимое с информацией, полученной с сервера.

Сравнение производится по дате модификации файла и размеру.

Измененные файлы передаются на сервер, т.о. на сервере поддерживается актуальная копия данных.

Разработать протокол резервного копирования на основе TCP.

Инструменты: язык ANSI C, набор вызовов socket API / POSIX

~terminal_select

TCP клиент, ориентированный на построчный ввод-вывод текста.

Задача - дать пользователю вводить с терминала и отправлять по TCP соединению, а также принимать из соединения и отображать на терминале текстовую информацию.

Эта возможность может быть для экспериментов с протоколами

Интернет, которые, в большинстве, представляют собой текстовые протоколы.

Пользователь запускает программу командой:

./my_tcp_client <remote_ip> <remote_port>

Клиентская программа устанавливает сетевое соединение и входит в режим одновременного ожидания ввода данных

- от пользователя через терминал.

- от удаленной стороны через сокет.

Использовать вызов select() для ожидания события.

Инструменты: язык ANSI C, набор вызовов socket API / POSIX

~super_daemon

Сервер, принимающий входящие соединения, делегирующий обработку диалога с клиентом сторонней программе через интерфейс стандартного ввода-вывода.

Для отделения управления соединениями и самого диалога с клиентом на стороне сервера можно применить т.н. суперсервер.

Принятое соединение становится стандартным вводом и выводом дочернего процесса, запускаемого суперсервером для обработки диалога с клиентом.  Пример приложения такого рода: inetd.

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

Для порождения дочернего процесса использовать семейство вызовов fork()/exec().

Для перенаправления ввода/вывода в порожденном процессе использовать вызов dup2().

Инструменты: язык ANSI C, набор вызовов socket API / POSIX

~load_udp_sender

Программа для моделирования нагрузки на IP сеть.

Задача сгенерировать определенный объем трафика по параметрам, заданным пользователем.

Параметры:

- IP и PORT назначения, куда будут оправляться сгенерированные датаграммы.

- Диапазон размеров тела датаграммы min, max.

При генерации очередной датаграммы ее размер выбирается случайно из заданного диапазона.

- Диапазон задержки между посылками отдельных датаграмм: min, max.

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

- Общее количество датаграмм к отправке.

Тело датаграммы должно содержать в начале ее порядковый номер виде 32-битного числа с сетевым порядком байт. Остальное место заполнить псевдо-случайным шумом.

Замерить общее время отправки всех датаграмм.

~load_udp_receiver

Программа для анализа нагрузки на IP сеть.

Задача проанализировать поступающий UDP трафик, собрать и вывести статистику по 10-сек. и минутным интервалам.

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

Программе задается порт для приема данных.

Результат выводить на терминал в режиме реального времени.

~simple_http_client

Простой неинтерактивный клиент протокола HTTP.

Входные данные: IP-адрес и порт сервера, путь к файлу от корня

WEB-сервера, имя локального файла для сохранения результата.

Клиент получает документ с сервера GET-запросом и сохраняет его в локальный файл в случае успеха (код 200).

Предусмотреть анализ ошибочных ситуаций (коды 404, 500).

Параметры программа принимает с командной строки.

~socks4_proxy

Реализовать проксирующий TCP-соединения сервер, работающий по протоколу SOCKS4.

http://ru.wikipedia.org/wiki/SOCKS

Основной алгоритм работы прокси сервера такой:

1. Принимаем соединение

2. Парсим заголовок

3. Устанавливаем соединение с целью

4. Отвечаем клиенту что всё ОК

5. Проксируем

6. Закрываем соединения

Особое внимание обратить на вопросы безопасности:

исключить возможность переполнения буфера.