
Презентации и задания для практики NetCracker / Практика / 07. Tетевvе приложения
.docПрактическая работа №7
Задание на практическую работу
В процессе написания тестовых заданий ознакомьтесь с базовыми принципами создания клиент-серверных приложений, основанных на применении сокетов.
Задание 1
Реализуйте клиентскую часть приложения в новом классе buildings.net.client.BinaryClient, содержащем метод main().
Входными параметрами программы (аргументами командной строки) являются имена трех файлов. Первый файл существует на момент запуска программы и содержит в текстовом виде информацию о зданиях (например, одна строка – одно здание). Второй файл существует на момент запуска программы и содержит в текстовом виде информацию о видах зданий (например, одна строка – одно слово, определяющее вид здания). Количество записей в первом и втором файле можно считать соответствующим друг другу, но неизвестным заранее (т.е. оно даже не записано в первой строке файлов). Файлы можно считать корректными. Третий файл должен быть создан программой в ходе работы и должен хранить в текстовом виде оценки стоимости зданий (например, одна строчка – одна оценка стоимости).
Программа должна установить через сокеты соединение с сервером, после чего считывать из первого и второго файла данные о здании, передавать их в бинарной форме серверу и получать от него результат оценки стоимости здания, и так по очереди для всех исходных данных.
Для обеспечения работы приложения потребуется создание протокола взаимодействия клиентской и серверной частей: порядка передачи данных, определения условия завершения передачи данных.
Считывание данных из первого файла, а также запись данных в поток сокета рекомендуется реализовать с помощью средств класса Buildings. Также рекомендуется реализовать вывод информации о текущей операции в консоль (например, с помощью ранее реализованных методов toString() зданий).
Задание 2
Реализуйте серверную часть приложения в новом классе buildings.net.server.sequental.BinaryServer, содержащем метод main(). Сервер должен выполнять последовательную обработку запросов в соответствии с созданным ранее протоколом общения клиентской и серверной части.
Оценка стоимости здания считается как сумма всех площадей помещений здания, умноженная на 1000$ для жилого дома, на 1500$ для офиса и на 2000$ для любой гостиницы.
Процедуру оценки стоимости здания следует реализовать в виде отдельного метода класса сервера.
При считывании данных из потока рекомендуется использовать методы класса Buildings, включая механизм настройки фабрик.
Задание 3
Включите в начало метода оценки стоимости проверку на то, не наложен ли на здание арест, и реализуйте в классе сервера метод проверки ареста здания. В рамках учебного задания для простоты будем считать, что метод проверки использует датчик случайных чисел и в среднем сообщает об аресте здания в 10% случаев.
Метод оценки стоимости в случае ареста здания должен выбросить объявляемое исключение BuildingUnderArrestException (также опишите класс этого исключения). Клиенту же в таком случае вместо оценки стоимости следует отправить сообщение об аресте здания.
Задание 4
Реализуйте серверную часть приложения в рамках модели параллельной обработки запросов. Для этого создайте новый класс buildings.net.server.parallel.BinaryServer.
Задание 5
Создайте новые классы buildings.net.client.SerialClient, buildings.net.server.sequental.SerialServer и buildings.net.server.parallel.SerialServer, решающие ту же задачу, но отличающиеся по протоколу взаимодействия: для передачи данных следует использовать сериализацию. Данные о здании передаются в виде объекта, исключение передаётся клиенту в виде объекта и т.д.