https://github.com/kimdaniiell/java-lab-6
Лабораторная работа 6
https://github.com/kimdaniiell/java-lab-6
Last synced: 3 months ago
JSON representation
Лабораторная работа 6
- Host: GitHub
- URL: https://github.com/kimdaniiell/java-lab-6
- Owner: KIMdaniiell
- Created: 2021-09-29T12:50:38.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-10-09T10:39:05.000Z (over 3 years ago)
- Last Synced: 2025-01-12T11:47:51.007Z (4 months ago)
- Language: Java
- Size: 261 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Java-Lab-6 | Лабораторная работа 6
## Разделить программу из лабораторной работы №5 на клиентский и серверный модули. Серверный модуль должен осуществлять выполнение команд по управлению коллекцией. Клиентский модуль должен в интерактивном режиме считывать команды, передавать их для выполнения на сервер и выводить результаты выполнения.
#### Необходимо выполнить следующие требования:
+ Операции обработки объектов коллекции должны быть реализованы с помощью Stream API с использованием лямбда-выражений.
+ Объекты между клиентом и сервером должны передаваться в сериализованном виде.
+ Объекты в коллекции, передаваемой клиенту, должны быть отсортированы по размеру
+ Клиент должен корректно обрабатывать временную недоступность сервера.
+ Обмен данными между клиентом и сервером должен осуществляться по протоколу TCP
+ Для обмена данными на сервере необходимо использовать сетевой канал
+ Для обмена данными на клиенте необходимо использовать потоки ввода-вывода
+ Сетевые каналы должны использоваться в неблокирующем режиме.
#### Обязанности серверного приложения:+ Работа с файлом, хранящим коллекцию.
+ Управление коллекцией объектов.
+ Назначение автоматически генерируемых полей объектов в коллекции.
+ Ожидание подключений и запросов от клиента.
+ Обработка полученных запросов (команд).
+ Сохранение коллекции в файл при завершении работы приложения.
+ Сохранение коллекции в файл при исполнении специальной команды, доступной только серверу (клиент такую команду отправить не может).
#### Серверное приложение должно состоять из следующих модулей (реализованных в виде одного или нескольких классов)::+ Модуль приёма подключений.
+ Модуль чтения запроса.
+ Модуль обработки полученных команд.
+ Модуль отправки ответов клиенту.
Сервер должен работать в однопоточном режиме.#### Обязанности клиентского приложения:
+ Чтение команд из консоли.
+ Валидация вводимых данных.
+ Сериализация введённой команды и её аргументов.
+ Отправка полученной команды и её аргументов на сервер.
+ Обработка ответа от сервера (вывод результата исполнения команды в консоль).
+ Команду save из клиентского приложения необходимо убрать.
+ Команда exit завершает работу клиентского приложения.Важно! Команды и их аргументы должны представлять из себя объекты классов. Недопустим обмен "простыми" строками. Так, для команды add или её аналога необходимо сформировать объект, содержащий тип команды и объект, который должен храниться в вашей коллекции.
-------------------------------
#### Дополнительное задание:
Реализовать логирование различных этапов работы сервера (начало работы, получение нового подключения, получение нового запроса, отправка ответа и т.п.) с помощью Java Util Logging