СОДЕРЖАНИЕ
Глава 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. Общие сведения.
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. Перечень сопроводительной документации: техническое задание.
Под технологией разработки ПО понимают оптимальный способ ведения разработки, который при определенных условиях обеспечит получение конечного продукта с заранее заданными свойствами.
В ходе исследования был структурирован существующий материал и на его основе создана технология разработки клиент-серверных приложений. Разработка осуществляется по следующему алгоритму:
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. Релиз и дальнейшая поддержка. Стабильная версия программы, готовая к использованию по её назначению, прошедшая тестирования, в которых исправлены основные ошибки, но существует вероятность появления новых, ранее не замеченных, ошибок.
Структурная модель строилась так что даже после релиза можно относительно легко добавлять новый функционал.
Рисунок 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 = "Неизвестный";