Файл: I. основные сведения о предприятии ооо сах. Ком.doc

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

Категория: Не указан

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

Добавлен: 26.10.2023

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
new AuthorizePacket();
AP.read(in);
switch (AP.getSost()) {
case 1: {
Cipher encrypter_RSA = Cipher.getInstance("RSA"); KeyFactory kf = KeyFactory.getInstance("RSA");
encrypter_RSA.init(Cipher.ENCRYPT_MODE,kf.generatePublic(new X509EncodedKeySpec(AP.getKey())));
AP.setKey(encrypter_RSA.doFinal(KeyAES.getEncoded()));
sendPacket(AP,client);
break;
}
case 2:{
name = AP.getName();
if (AP.getCheck().equals("ВсеОк")){
value = name+


  • IP: "+client.getInetAddress().getLocalHost().getHostAddress().toString(); Server.csls.put(value, client);


MesPacket M = new MesPacket(encrypter_AES.doFinal((""+name + " вошел в чат"+"").getBytes()));
M.readAll();
break;
}
AP.setSost((short)3);
sendPacket(AP,client);

close();


}
default: {
MesPacket M = new
MesPacket(encrypter_AES.doFinal((""+name + "
вышел из чата"+"
").getBytes()));
M.readAll();
close();
break;
}
}
break;
}
}
} else
Thread.sleep(10);
}
} catch (Exception e) {
System.err.println("Отключение"+name);
close();
}
}
Подключение к серверу (на клиенте):
private void Start() {
try {
TextChat.getDocument().insertString(TextChat.getDocument().getLengt
h(), "Идет подключение..." + "\n", null);
socket = new Socket(sip, 9322);

//обработка в случае успешного соединения с сервером.
handle();
} catch (Exception e) {
try {
TextChat.getDocument().insertString(TextChat.getDocument().getLengt h(), "Не удалось подключиться к серверу, закройте приложение" + "\n", null);
} catch (BadLocationException e1) { System.exit(0);
}
}
}


public static void sendPacket (AbsPacket P,Socket s){ DataOutputStream out;
try {
out = new DataOutputStream(s.getOutputStream());
out.writeShort(P.GetId()); //считываем id пакета и пишем
P.write(out);
out.flush();
} catch (IOException e) { try {
s.close();
} catch (IOException e1) {
}
System.out.println("Закрытие потока");
}
}


public void close() {

Server.csls.remove(value);
interrupt();
}
}
public void readPacket() { //на клиенте
try {
short id = in.readShort();
switch (id) {
case 1: {
try {
int size = in.readInt();
int lenByte = in.readInt();
byte[] b = new byte[lenByte];
in.read(b);
int sh = 0;
String a = new String (decrypter_AES.doFinal(b)); StringBuffer buf = new StringBuffer(a);

HTMLEditorKit kit = (HTMLEditorKit) TextChat.getEditorKit();
if (size > 0)
for (int i = 0; i < size; i++) {
int C = in.readInt() + sh;
int S = in.readInt();


buf.replace(C - 1, C, "");
System.out.println("buf = " + buf);
sh += 24 + listPathIm[S].length();
}
kit.insertHTML((HTMLDocument)
TextChat.getDocument(), TextChat.getDocument().getLength(),

"[" + formating.format(System.currentTimeMillis()) + "] " + buf, 0, 0, null); panel.updateUI();
} catch (BadLocationException e) {
}
break;
}
case 3: {
AuthorizePacket AP = new AuthorizePacket();
AP.read(in);
if (AP.getSost() == 1) {
Cipher decriptCipher = Cipher.getInstance("RSA"); decriptCipher.init(Cipher.DECRYPT_MODE, kP.getPrivate());
SecretKey Key = new
SecretKeySpec(decriptCipher.doFinal(AP.getKey()), "AES");
encrypter_AES.init(Cipher.ENCRYPT_MODE, Key);
decrypter_AES.init(Cipher.DECRYPT_MODE, Key);
AP.setSost((short) 2);
AP.setName(name);
sendPacket(AP);
} else {

TextChat.getDocument().insertString(TextChat.getDocument().getLengt h(), "Ошибка аутентификации, закройте приложение" + "\n", null);

}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

private void handle() { //на клиенте
try {
out = new DataOutputStream(socket.getOutputStream()); in = new DataInputStream(socket.getInputStream());
sendPacket(new AuthorizePacket(kP.getPublic().getEncoded(),(short)1));
while (true) {
if (in.available() > 0)
readPacket();
else
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
System.err.println("Ошибка чтения/передачи");
close();
e.printStackTrace();
}
}


Каждый пакет данных пересылающийся клиентом или сервером присваивается свой id. Это позволяет структурировать разного рода, типа информацию.
Java, строгий язык на котором можно решать в принципе любую задачу, благодаря кроссплатформенности может работать на разных платформах что очень важно для клиентской части.
Алгоритм работы системы программы выглядит следующим образом:

  1. Сервер подключается к порту на хосте и ждет соединения с клиентом;




  1. Клиент создает сокет и пытается соединить его с портом на хосте;




  1. Если создание сокета прошло успешно, то сервер переходит в режим ожидания команд от клиента;




  1. Клиент формирует команду и передает ее серверу, переходит в режим ожидания ответа;




  1. Сервер принимает команду, выполняет ее и пересылает ответ клиенту;




  1. Клиент обрабатывает полученную информацию и выводит её пользователю в удобном виде, для её восприятия.




  1. Пока клиент или сервер не разорвет соединение смотреть пункт 4.


Приложение объединяет в себе два режима:


  • Режим сервера: Запускает сервер на порту 9322. Представляет с собой окно со списком подключившихся к нему клиентов. В верхней части окна отображается IP адрес по которому клиенты имеют возможность подключиться;




  • Режим клиента: открывается окно в котором нужно ввести IP сервера и “nickname” который должен состоять от 5 до 15


латинских, русских символов или цифр.
При создании сервера генерируется симметричный ключ алгоритмом AES этим ключом сервер шифрует всю информацию, передаваемую клиентам. Для получения этого ключа клиент при подключении к серверу генерирует у себя парный ключ (публичный и приватный) алгоритмом RSA.





Рис. 5 Главное меню



Рис. 6 Подключение к серверу





Рис. 7 Режим сервера

Разработанное приложение работает везде где можно установить Java Runtime Environment 7 или выше. Имеет хорошую степень защиты информации т.к использует алгоритм AES, принятый в качестве стандарта шифрования правительством США в 2001 году.

2.3.2 Результат тестирования клиент-серверного приложения

Разработанное веб-приложение прошло функциональное тестирова-ние. Функциональное тестирование – это тестирование программного обеспечения с целью проверки соблюдения функциональных требований, то есть способности программного обеспечения в определенных условиях решать за-дачи, поставленные перед ней на этапе проектирования. Результаты тестирования приведены в таблице 2. Проведены необходимые тесты, охватывающие весь функционал разработанного клиент-серверного приложения.

Таблица 2 - Функциональное тестирование



Название те-




Шаги

Ожидаемый

Тест

п/п

ста







результат

пройден?



















1.

Авторизация

1.

Пользователь захо-

Пользователь

Да







дит на страницу авто-

авторизуется,










ризации.

попадает в ин-










2.

Вводит логин и па-

терфейс адми-










роль.

нистратора и










3.

Нажимает кнопку

получает его










«Войти».

права.






















2.

Добавление

1.

Администратор за-

Новый админи-

Да




нового

ходит на страницу

стратор создан,







администра-

списка администрато-

администратор







тора

ров.

перенаправля-










2.

Администратор

ется на страницу










нажимает кнопку «До-

редактирования










бавить».

пользователя.










3.

Администратор













вводит новые логин и













пароль и нажимает













кнопку «Сохранить».

























3.

Удаление

1. Администратор за-

Выбранные ад-

Да




администра-

ходит на страницу

министраторы







тора

списка администрато-

удалены, адми-










ров.

нистратор пере-










2. Администратор вы-

направляется на










бирает одного или не-

ту же страницу.










скольких пользовате-













лей из списка.













3. Администратор













выбирает «Удалить»,













а затем «Выполнить»













и подтверждает дей-













ствие.






















4.

Удаление

1. Администратор за-

Выбранные

Да




сотрудников

ходит на страницу

альбомы со-










просмотра альбомов

трудников и










сотрудников.

связанные с










2. Администратор вы-

ними записи










бирает одного или не-

удалены, адми-










скольких сотрудников

нистратор пе-










из списка.

ренаправляется










3. Администратор

на ту же стра-










выбирает «Удалить»,

ницу.










а затем «Выполнить»













и подтверждает дей-













ствие.

























5.

Просмотр дан-

1. Администратор за-

Происходит пе-

Да







ных конкрет-

ходит на страницу

реход на стра-










ного сотруд-

просмотра альбомов

ницу с дан-










ника

сотрудников.

ными сотруд-













2. Администратор

ника. Данные













нажимает на ссылку,

отображаются













ведущую на стра-

корректно и













ницу отслеживания

упорядочено.













сотрудника.




























6.

Установка ло-

1. Администратор за-

Клиент скопи-

Да







кального кли-

пускает локальный

рован в папку










ента

клиент с заданными

на компьютере,













параметрами

в реестр добав-













2. Локальный клиент

лена запись для













устанавливается, до-

автозапуска, на













бавляет запись в ре-

сервере создан













естр, создает конфи-

альбом нового













гурационный файл.

сотрудника.













3. Локальный клиент
















создает на сервере
















новый альбом со-
















трудника.


























Для реализации апробации было проведено тестирование приложения в компании «Сах.ком». Для выявления ошибок была создана анкета с вопросами, которая заполнялась после тестирования приложения.
Анкета 1.

Результаты тестирования приложения



  1. ОС с который вы запускали данное приложение:




    1. Windows




    1. Linux




    1. Mac OS X




    1. Другое:_____________




  1. Были ошибки во время работы приложения, если да, то какие?


Развернутый ответ:________________________________


  1. Удобный интерфейс?




    1. Да




    1. Нет




  1. Оцените приложение по шкале от 1 до 5




  1. Пожелания для улучшения дизайна/работы приложения Развернутый ответ:________________________________



Результаты тестирования показали следующее:


  1. Ошибки во время работы приложения небыли обнаружены;




  1. Интерфейс посчитали удобным 95,5% тестируемых (Рисунок 12);



Рис.8. Оценка удобства интерфейса


  1. Средняя оценка приложения составила: 4,59 (Рисунок 13);



Рис.9. Оценка работоспособности и устойчивости приложения




  1. Все пожелания были учтены, приложение доработано за несколько дней.




Рис. 10 Платформы, на которых протестирована работа приложения
По результатам анкетирования критических багов не обнаружено. Найденные ошибки были исправлены в следующей версии, как пожелания и замечания тестировщиков.

  1. Игра была установлена и работала под разными версиями операционных систем (Рисунок 14);




  1. Ошибки во время работы приложения небыли обнаружены;