Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
50
Добавлен:
08.06.2015
Размер:
32.77 Кб
Скачать

Практическая работа №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, решающие ту же задачу, но отличающиеся по протоколу взаимодействия: для передачи данных следует использовать сериализацию. Данные о здании передаются в виде объекта, исключение передаётся клиенту в виде объекта и т.д.