Лабораторная работа 3

На выполнение Лабораторной работы 3 дается 4 недели.
Срок – Последняя неделя ноября.

Выберите один из нижеследующих вариантов.

***************************************************************************

Вариант 1
Тема: Мультипротокольный сервер.

Задание:
1. Написать программу (на языке C/C++/Java, консольное приложение), реализующую работу сервера по двум протоколам TCP и UDP с помощью системного вызова select.
2. Для TCP протокола сервер создает поток (Thread) для обработки каждого клиента. Клиент передает текстовые сообщения из нескольких слов или предложений. Информацию, получаемую от клиентов сохранять в одном общем файле и при этом сохранять целостность сообщений (использовать mutex).
3. Для UDP протокола реализовать: подтверждение приема для каждой датаграммы, т.е. сохранение целостности всей информации клиентов. Клиент передает файл или сообщение (несколькими датаграммами), сервер принимает. Продемонстрировать реализованные возможности при одновременной передачи файлов от нескольких UDP клиентов к серверу. Например, при запуске сервера указать - какие пакеты и сколько раз будут потеряны. Результат правильности приема выводить на экран.
4. Реализация - на языке C/C++, консольные приложения.

Серверная программа должна находить номер свободного порта и выводить его на экран (см., например, [1], стр. 338-342: функции bind, getsockname). При запуске клиентской программы задавать со строки IP адрес сервера и порт.

Полезные ссылки:
1. Фейт С. TCP/IP: Архитектура, протоколы, реализация (включая IP версии 6 и IP Security). – М.: Лори, 2000. – 424 с.

***************************************************************************

Вариант 2
Тема: Создание клиент-серверного приложения на базе транспортного протокола SCTP.

Задание:

Требуется разработать клиент-серверные программы (на языке C/C++, консольные приложения) передачи данных на базе транспортного протокола SCTP [1, 2]. Обеспечить передачу информации по нескольким потокам в одной ассоциации (особенность протокола SCTP).

1. Клиентская программа посылает в одном соединении или ассоциации: текстовое сообщение в первом потоке; файл с картинкой во втором потоке.
2. Серверная программа принимает в одной ассоциации от каждого из клиентов: текстовое сообщение с первого потока и выводит на экран; со второго потока принимает данные и сохраняет в файл.
3. В серверной программе реализовать (на выбор) параллельную или псевдопараллельную обработку клиентов.

Серверная программа должна находить номер свободного порта и выводить его на экран (см., например, [3], стр. 338-342: функции bind, getsockname). При запуске клиентской программы задавать со строки IP адрес сервера и порт.

Полезные ссылки:
1. Протокол SCTP http://rfc.com.ru/rfc2960.htm
2. Стивенс У.Р., Феннер Б., Рудофф Э. М.UNIX: разработка сетевых приложений. - 3-е изд. - СПб. : ПИТЕР, 2007. - 1038с.
3. Фейт С. TCP/IP: Архитектура, протоколы, реализация (включая IP версии 6 и IP Security). – М.: Лори, 2000. – 424 с.

***************************************************************************

Вариант 3
Тема: Разработка клиент-серверной программы на основе сетевой библиотеки Boost.Asio.

Задание:

Используя сетевую библиотеку Boost.Asio разработать программы асинхронного сервера, клиента на протоколе TCP. Реализация - на языке C/C++, консольные приложения.

Клиент отправляет текстовое сообщение. В ответе сервер возвращает преобразованное сообщение, в котором каждое слово «перевернуто» относительно исходного, но сохранен порядок их расположения.

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

Полезная ссылка:
1. Boost.Asio http://habrahabr.ru/post/192284/