Skip to content

Latest commit

 

History

History
100 lines (63 loc) · 13.8 KB

README.md

File metadata and controls

100 lines (63 loc) · 13.8 KB

Практические задания по дисциплине "Компьютерные сети" (7 семестр)

Содержание

  1. Решение вводных задач на Java
  2. Разработка элементарных приложений на языке Java
  3. Разработка многопоточных приложений на языке Java
  4. Разработка многопоточных приложений на языке Java. Синхронизация потоков

Задание 1. Решение вводных задач на Java.

Решение вводных задач на Java из раздела Introduction:

Задание 2. Разработка элементарных приложений на языке Java.

Разработать класс, решающий квадратные уравнения. Коэффициенты квадратного трехчлена или передаются в качестве параметров класса, в противном случае вводятся из консоли. Коэффициенты могут быть любыми действительными числами.

Требования к решению:

  1. В решении должен присутствовать класс "Квадратное уравнение"
  2. В этом классе должны присутствовать два конструктора: первый с тремя параметрами, а второй с одним параметром - сканнером. В первом случае передаются коэффициенты уравнения и сохраняются в классе. Во втором случае коэффициенты нужно читать из полученного сканера. Допустимо во второй конструктор передавать сканер, из которого будут читаться коэффициенты.
  3. Решение должно корректно обрабатывать случаи равенства нулю некоторых из коэффициентов уравнения, в частности a=0

Задание 3. Разработка многопоточных приложений на языке Java.

Разработать многопоточное приложение, позволяющее в интервале 100000000 — 400000000 найти все числа, которые одновременно делятся на 11, 13, 17. Выяснить различие во времени выполнения программы для случая одного потока и трех потоков.

Дополнительное задание: Предусмотрите возможность указать количество создаваемых потоков при запуске приложения

Задание 4. Разработка многопоточных приложений на языке Java. Синхронизация потоков.

Разработать приложение, решающее задачу о синхронизации производитель-потребитель. Дано два потока, один из потоков должен передать другому последовательность целых чисел длины n, например, квадратов натуральных чисел. Другой поток должен принять и распечатать эту последовательность.

Решить задачу двумя способами:

  1. С использованием класса BlockingQueue
  2. С использованием общих переменных и методов wait/notify

Задание 5. Разработка клиент-серверных приложений на языке Java

Реализовать задание "Разработка многопоточных приложений на языке Java" в клиент-серверном варианте, т.е. сервер запускается и ожидает подключения клиента(тов), клиент, подключившись к серверу, получает от него порядковый номер и интервал длинною в 1000000 и возвращает серверу найденные числа. Предусмотреть вывод консольных сообщений на стороне сервера.

Этапы выполнения задания:

  1. Сервер ожидает подключения трёх клиентов. После подключения всех клиентов, каждому из них выдаётся порядковый номер и интервал. В консоль выводится, какой интервал каждому из них был выдан. После этого сервер ожидает от клиента результата и выводит найденные числа в консоль. Клиенты отключаются после отправки результата решенной задачи. (80 баллов)

  2. Сервер ожидает подключения трёх клиентов, но данные для обработки отправляются сразу же после подключения, а результат получается по мере готовности. Для этого необходимо создать на сервере для каждого подключенного клиента отдельный поток, который бы занимался передачей и приемом сообщений. Клиенты отключаются после отправки результата решенной задачи. (90 баллов)

  3. Сервер ожидает подключения неограниченного количества клиентов. Клиенты не прекращают работу после решения одной задачи, а ожидают от сервера дополнительных задач. Необходимо предусмотреть возможность добавления задач на сервере через консоль в формате L R Step (найти количество чисел в отрезке [L,R], которые делятся на 11, 13 и 17, разделив этот отрезок на куски длиной Step. Последний кусок может иметь меньшую длину).

Задание 6. Разработка оконных приложений на языке Java

Оформить клиентскую часть задания "Разработка клиент-серверных приложений на языке Java" в виде интерфейса пользователя. Требуется, чтобы в приложении можно было указать IP-адрес сервера и порт, по которому к нему подключаться. Подключение производится при нажатии на кнопку "Подключиться". Если соединение не было установлено, выводите сообщение об ошибке.

Задание оценивается в 85 баллов.

Дополнительные задания (каждое по +5 баллов):

  1. Отображайте в окне текущее состояние клиента (отключен/подключен/выполняет задачу).

  2. Сделайте так, чтобы клиент выполнял несколько задач при нажатии "Подключиться". Для этого он или должен не отключаться от сервера после выполнения одной задачи, или в случае, если сервер не поддерживает выдачу нескольких задач, осуществляет повторное подключение, пока это возможно. Графический интерфейс при этом не должен "зависать".

  3. Добавьте отображение в окне всех запросов, которые решил клиент.

Задание 7. Разработка сервлетов на языке Java.

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

Этапы выполнения задания:

  1. Приложение должно включать в себя java сервлет и jsp страницу. На странице находится форма, в которой можно задать диапазон для поиска чисел, которые делятся на 11, 13 и 17. Результат работы формы отправляется на ту же страницу. Сервлет или просто перенаправляет вывод на jsp страницу, если запроса не было, или выводит все найденные числа под формой. (60 баллов)

  2. Сервлет отправляет поступающие к нему запросы приложению Сервер из задания "Клиент-серверные приложения". Результаты работы сервера выводятся на страницу по мере готовности. (Примечание: Сервер можно добавить в состав проекта с сервлетом, а можно подключаться к нему по сети) (70 баллов) .

  3. Дополните ваше приложение, выполнив следующие задачи:

  • Подключать в JSP страницах заголовок из отдельного файла (+5 баллов)

  • Добавить отдельную JSP страницу для вывода ответов на запросы (+5 баллов)

  • Добавить страницу, на которой можно посмотреть информацию о всех подключенных к серверу клиентах-рабочих с возможностью их отключения (+5 баллов)

  • Добавить работу с сессиями (запоминать предыдущий запрос в сессии пользователя, чтобы при следующих обращениях к странице подставлялся именно он / показывать только те запросы, которые сделал сам пользователь) (+5 баллов)

Дополнительное задание. Вместо вывода чисел, делящихся на 11, 13 и 17, выбрать и реализовать другую задачу, которой можно ускорить с использованием большого количества потоков. Примеры задач:Построение фрактальных изображений (Множество Мандельброта, множество Жюлиа; клиент рисует часть изображения, в одно общее изображение их собирает сервер) Произведение матриц A*B размеров (Пользователь загружает две матрицы, каждому клиенту отправляется матрица B полностью, а A делится на полосы из строк и отсылается тем, кто будет умножать их на B, результаты умножения собираются в строки на сервере) Классификация точек (метод 1 или k ближайших соседей; на сервер можно отправлять или обучающую выборку, или множество запросов, которые необходимо классифицировать; каждый клиент хранит у себя все обучающие экземпляры и отвечает на часть запросов) и т.д.