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. Закрываем соединения
Особое внимание обратить на вопросы безопасности:
исключить возможность переполнения буфера.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.