Файл: Теоретические основы разработки клиент серверных приложений на языке Java.pdf
Добавлен: 16.05.2023
Просмотров: 1106
Скачиваний: 11
СОДЕРЖАНИЕ
Глава 1. Теоретические основы разработки клиент серверных приложений на языке Java
1.1 Разработка клиент-серверных приложений
1.2 Особенности разработки приложений на языке Java
Глава 2. Разработка клиент-серверного чата на языке Java
2.1 Технология разработки клиент-сервер приложения.
Класс Cipher, который является суперклассом всех классов, имеющих отношение к шифрованию, для создания объекта, реализующего алгоритм шифрования, используется метод getInstance().
Первым параметром задаётся имя алгоритма в виде строки, например,
«AES» или «AES/CBC/PKCS5Padding». Поддерживаемые алгоритмы шифрования можно посмотреть в документации «Standard Algorithm Name Documentation» на официальном сайте oralce. Второй параметром указывается провайдер.
Криптографические реализации в JDK распределяются через несколько различных провайдеров (Sun, SunJSSE, SunJCE, SunRsaSign) и по историческим причинам и типами предоставленных услуг. Приложения общего назначения не ДОЛЖНЫ запрашивать криптографические службы от определенных провайдеров[14]. Это:
Cipher cipher = Cipher.getInstance("...", "SunJCE"); // not recommended
Cipher cipher = Cipher.getInstance("..."); // recommended
Иначе, приложения связываются к определенным провайдерам, которые, возможно, не доступны на других реализациях Java. Они также не могли бы быть в состоянии использовать в своих интересах доступных оптимизированных провайдеров (например, аппаратные акселераторы через PKCS11 или собственные реализации ОС, такие как MSCAPI Microsoft), у которых есть более высокий привилегированный порядок чем определенный требуемый провайдер.
Объектно-ориентированный язык Java содержит в себе развивающейся API передачи данных по всемерной сети, так же придает особое значение безопасности, включая безопасность языка, криптографию, инфраструктуру управления открытыми ключами, аутентификацию, безопасную передачу, и управление доступом. Эти качества очень важны для построения клиент-серверных приложений.
1.3 Техническое задание
1. Общие сведения.
1.1. Название организации-заказчика: ООО “УП2021” 1.2.Название продукта разработки (проектирования): «Chat».
1.3. Назначение продукта обеспечивать мгновенную связь двух и нескольких пользователей одновременно посредством передачи небольшого количества информации непосредственно друг другу.
1.4. Плановые сроки начала и окончания работ: Начало работы: 16.01.2017.
Окончание работы: 19.02.2017.
2. Область применения продукта.
2.1. Процессы и структуры, в которых предполагается использование продукта разработки: посредством интернета данный чат может соединять двух людей в любой точке мира (где есть интернет). Он может применятся для личной переписки двух людей, и для небольшой группы
(предприятие или офис). Количество пользователей определяется техническими характеристиками сервера.
2.2. Характеристика персонала (количество, квалификация, степень готовности): для использования данного продукта требуются минимальные умения работы с ПК.
3. Требования к продукту разработки
3.1. Требования к продукту в целом: продукт должен представлять с собой Java-приложение с пользовательским интерфейсом, написанное для работы с виртуальной машиной Java.
3.1.1. Минимальные аппаратные требования Клиент:
• Частота процессора: 1 ГГц;
• Количество ядер: 1;
• Разрешение экрана (минимальный размер окна): 400x300;
• Объем оперативной памяти: 128 Мб.
• Объём графической памяти 128 Мб
• Соединение с интернетом. Сервер:
• Частота процессора: 1 ГГц;
• Количество ядер: 2;
• Разрешение экрана (минимальный размер окна): 300х400 пикселей;
• Объем оперативной памяти: 512 Мб (можно и ниже, но кол-во пользователей, которых можно будет подключить к серверу, будет ограниченным).
• Обьем графической памяти 128 Мб.
• Соединение с интернетом.
3.2. Указание системного программного обеспечения: Java Runtime Environment 7 или выше;
3.3. Указание программного обеспечения, используемого для реализации: Eclipse;
3.4. Особенности реализации серверной и клиентской частей: данные передающееся от клиента к серверу и обратно – это пакеты, состоящие из номера пакета и шифрованного массива байтов, при получении дешифруются и преобразуются в примитивные типы данных.
3.4.1. Форматы входных и выходных данных: входные данные – ip сервера и nickname, выходные данные – данные различного формата (текстовые и графические) от сервера (других клиентов).
3.4.2. Источники данных и порядок их ввода в систему (программу), порядок вывода, хранения: при запуске сервера в верхней части экрана отображается ip сервера, по нему происходит подключение клиентов.
3.5. Меры защиты информации: информация передающееся от клиента к серверу и наоборот, шифруется симметричным алгоритмом блочного шифрования “AES”, принятого в качестве стандарта шифрования правительством США в 2001г.
4. Требования к пользовательскому интерфейсу
4.1. Общая характеристика пользовательского интерфейса: интуитивно- понятный графический интерфейс.
4.2. Размещение информации на экране, дизайн экрана: за пример дизайна брались чаты на популярных ресурсах vk.com, www.twitch.tv.
4.3. Особенности ввода информации пользователем, представление выходных данных: клиент общается посредством текста и графики (смайлы, картинки).
5. Перечень сопроводительной документации: техническое задание.
Глава 2. Разработка клиент-серверного чата на языке Java
2.1 Технология разработки клиент-сервер приложения.
Под технологией разработки ПО понимают оптимальный способ ведения разработки, который при определенных условиях обеспечит получение конечного продукта с заранее заданными свойствами.
В ходе исследования был структурирован существующий материал и на его основе создана технология разработки клиент-серверных приложений. Разработка осуществляется по следующему алгоритму:
1. Выбор архитектуры клиент-сервера (техническая часть). В начале разработки необходимо выбрать между двухуровневой и многоуровневой архитектурой. Выбор в данном случае зависит от количества пользователей, которые будут работать в данной системе, стоимости оборудования и дельнейшее обслуживания системы (например, доработка функционала). Подробное описание этих архитектур описаны в первой главе.
2. Выбор языка программирования (программная часть). Клиент-сервер можно написать на самых разных языках. У разных языков присутствуют свои особенности в реализации сетевых задач. Ниже приведен список десяти языков программирования по индексу TIOBE (“TIOBE programming community index”
– индекс, оценивающий популярность языков программирования, на основе подсчета результатов поисковых запросов [12]. Для формирования индекса используется поиск в нескольких наиболее посещаемых (по данным Alexa) порталах: Google, Blogger, Wikipedia, YouTube, Baidu, Yahoo!, Bing, Amazon.
|
Место |
Язык программирования |
Рейтинг |
Изменение % |
|
1 |
Java |
14.639% |
-6.32% |
|
2 |
С |
7.002% |
-6.22% |
|
3 |
С++ |
4.751% |
-1.95% |
|
4 |
Python |
3.548% |
-0.24% |
|
5 |
C# |
3.457% |
-1.02% |
|
6 |
Visual Basic .NET |
3.391% |
+1.07% |
|
7 |
JavaScript |
3.071% |
+0.73% |
|
8 |
Assembly language |
2.859% |
+0.98% |
|
9 |
PHP |
2.693% |
-0.30% |
|
10 |
Perl |
2.602% |
+0.28% |
Таблица 3. Рейтинг языков программирования май 2017г
Стоит учитывать, что Веб-программирование – это частный случай программирования клиент-серверного приложения [11]. Клиентом в веб- приложении выступает браузер, а сервером – веб-сервер что дает ряд плюсов:
• Низкая стоимость внедрения;
• Очень простая поддержка;
• Независимость от Операционной системы;
• Доступность из любой точки мира.
В веб-программировании обычно используют JavaScript на стороне клиента, а на стороне сервера могут быть как один или несколько языков программирования: PHP, Java, C++, C, JavaScript, ASP.NET, Python и другие.
3. Создание рабочего прототипа.
Процесс создания прототипа обычно состоит из шагов:
1. Определение начальных требований;
2. Разработка первого варианта прототипа, который содержит только пользовательский интерфейс системы;
3. Изучение прототипа заказчиком и конечными пользователями, получение обратной связи о необходимых изменениях и дополнениях;
4. Переработка и улучшение прототипа: с учетом полученных замечаний и предложений изменяются как спецификации, так и прототип, после этого шаги 3 и 4 могут повторяться.
Прототипы дают возможность глубже вникнуть в проблему и принять все необходимые проектные решения еще на ранних этапах проектирования [].
4. Тестирование. Для клиент-серверных приложений тестирование можно условно разделить на два уровня:
• Серверный;
• Клиентский.
На первом (серверном) уровне, тестируется взаимодействие выпускаемого программного обеспечения с окружением, в которое оно будет установлено:
1. Аппаратные средства (тип и количество процессоров, объем памяти, характеристики сети / сетевых адаптеров и т.д.);
2. Программные средства (ОС, драйвера и библиотеки, стороннее ПО, влияющее на работу приложения и т.д.);
3. Основной упор здесь делается на тестирование с целью определения оптимальной конфигурации оборудования, удовлетворяющего требуемым характеристикам качества (эффективность, портативность, удобство сопровождения, надежность).
На клиентском уровне, программное обеспечение тестируется с позиции его конечного пользователя и конфигурации его рабочей станции. На этом этапе будут протестированы следующие характеристики: удобство использования, функциональность. Для этого необходимо будет провести ряд тестов с различными конфигурациями рабочих станций:
1. Тип, версия и битность операционной системы (подобный вид тестирования называется кроссплатформенное тестирование);
2. Тип и версия Web барузера, в случае если тестируется Web приложение (подобный вид тестирования называется кросс-браузерное тестирование);
3. Тип и модель видео адаптера (при тестировании игр это очень важно);
4. Работа приложения при различных разрешениях экрана;
5. Версии драйверов, библиотек и т.д. (для JAVA приложений версия JAVA машины очень важна, тоже можно сказать и для .NET приложений касательно версии .NET библиотеки);
6. и т.д.
Уже на начальном этапе становится очевидно, что чем больше требований к работе приложения при различных конфигурациях рабочих станций, тем больше тестов нам необходимо будет провести. В связи с этим, рекомендуем, по возможности, автоматизировать этот процесс, так как именно при конфигурационном тестировании автоматизация реально помогает сэкономить время и ресурсы. Конечно же автоматизированное тестирование не является панацеей, но в данном случае оно окажется очень эффективным помощником.
5. Релиз и дальнейшая поддержка. Стабильная версия программы, готовая к использованию по её назначению, прошедшая тестирования, в которых исправлены основные ошибки, но существует вероятность появления новых, ранее не замеченных, ошибок.
2.2 Разработка клиент-серверного приложения
Структурная модель строилась так что даже после релиза можно относительно легко добавлять новый функционал.
Рисунок 7. Структурная модель многопользовательского приложения «Chat»
Взаимодействие серверного интерфейса и клиентов происходит через потокозащищённый HashMap содержащий всю информацию о клиентах.
Наиболее значимыми являются код взаимодействия клиента и сервера.
private void Handling() {
while (true) {
try {
Socket client = server.accept();
new ClientHandler(client,KeyAES).start();
//Если клиент успешно установил соединение передаем его обработчику
//клиентов, а также ключ которым шифруются данные.
} catch (IOException e1) { e1.printStackTrace();
}
try {
//после проверки данных в потоке засыпаем на 10 миллисекунд.
Thread.sleep(10);
} catch (InterruptedException e) { e.printStackTrace();
}
}
}
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket;
import java.security.Key;
import java.security.KeyFactory;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
class ClientHandler extends Thread { //на сервере
private final Socket client;
private String name = "Неизвестный";