Файл: Теоретические основы разработки клиент серверных приложений на языке Java.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 16.05.2023

Просмотров: 1106

Скачиваний: 11

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Класс 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 = "Неизвестный";