КЛИЕНТ-СЕРВЕРНОЕ ПРИЛОЖЕНИЕ «ДЕТСКИЙ САД» - Студенческий научный форум

IX Международная студенческая научная конференция Студенческий научный форум - 2017

КЛИЕНТ-СЕРВЕРНОЕ ПРИЛОЖЕНИЕ «ДЕТСКИЙ САД»

Шикин А.С. 1
1Балаковский инженерно – технологический институт – филиал федерального государственного автономного образовательного учреждение высшего образования «НИЯУ «МИФИ»»
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
СЕТЕВАЯ АРХИТЕКТУРА JINI

Инструментарий Jini Technology Starter Kit с недавних пор стал распространяться на условиях лицензии Apache License 2.0. Которая получила несколько лет назад всеобщую известность как технология однорангового сетевого взаимодействия электронного оборудования различных типов. Jini является наилучшим примером сервисной архитектуры с развитыми возможностями и позволяет клиентской программе, или потребителю, воспользоваться сервисом, предоставляемый другим приложением, или провайдером. Как правило, такое взаимодействие предусматривает некий вид асинхронной передачи сообщений или вызова функций в приложениях, работающих на удаленных системах.

Помимо базовой для SOA возможности, Jini предоставляет ряд других, таких как переносимость, мобильность кода и безопасность платформы. Инструментарий Jini легко использовать в приложениях с доступом к среде выполнения Java 2 Plаtform Standard Edition. Она также применяется в миниатюрных, встроенных устройствах и в приложениях, написанных на других языках программирования помимо Java.

Основная концепция Jini являются сервисы. Сервис представляет собой Java-интерфейс, который определяется контрактом между потребителем и провайдером. Большинство пользователей, как правило, интересует использование сервисов, а не их предоставление.

Следует учесть, что сервисы можно искать по типу, а не по URL или имени. Объект, который возвращается сервисом поиска, часто называют «посредником сервиса», поскольку он действует как дублер существующей где-то удаленно реализации сервиса. Посредник отвечает за все взаимодействия между приложением и реализацией сервиса.

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

Все, что нужно для установленного клиента Jini, — это интерфейс сервиса и прямые ссылки на типы переменных. Клиент сервиса Jini можно мгновенно обновлять, поскольку кодовая база посредника сервиса может меняться «на ходу», и вновь объединяющиеся клиенты будут выбирать его автоматически. Jini объединяет кодовую базу посредника и данные сервиса, чтобы предоставить посредника сервиса.

Функциональность Jini имеет подключаемую инфраструктуру, которая дает пользователям возможность легко интегрироваться с любым коммуникационным протоколом. Тип посредника сервиса может не согласовываться с реализациями сервисов. Например, можно легко создать смарт-клиентов, использовав посредника сервиса, который определенные вызовы методов выполняет на клиенте, а другие передают серверу. При взаимодействии между клиентом и сервисом может использоваться фактически любой протокол.

Концепция аренды имеет принципиальное значение для обеспечения надежности и отказоустойчивости Jini. Все посредники сервисов арендуются. Концепция аренды позволяет не беспокоиться о том, что сервисы могут выполняться неправильно, а связь — прерываться. Сервис доступен только в том случае, если он постоянно обновляет свою регистрацию, используя стандартные виды специальных утилит. Если это сделать не удается, сервис автоматически удаляется из системы. Клиенты так же могут просматривать только доступные сервисы. Распределенное приложение, по факту, выявляет часть ошибок и использует некоторые маршруты для их обхода. До тех пор пока нужные сервисы будут встроены с избыточностью. Приложение Jini может восстанавливаться почти всегда автоматически. Все возможности Jini в совокупности формируют весьма многообещающий вариант SOA.

  1. ПРАКТИЧЕСКОЕ ЗАДАНИЕ

Разработать клиент-серверное приложение «Детский сад», реализующее функциональный процесс распределенной обработки данных организации.

При запуске Java проекта открывается диалоговое окно где клиент проводит авторизацию рис.1.

Рисунок 1 – Авторизация

Если пользователь заполнил не все поля то появляется диалоговое сообщение что не обходимо «Заполнить все поля» рис.2.

Рисунок 2 – диалоговое сообщение

Если пользователь заполнил все пустые поля то после этого он перейдет на следующую форму рис.4.

Рисунок 3 – Авторизация

Рисунок 4 – Регистрация «Детского сада»

Введя данные во все пустые поля пользователь получит сообщение, что регистрация прошла успешно рис.5.

Рисунок 5 – Регистрация детского сада пройдена успешно

После того как пользователь нажмет на кнопку «ОК» все поля на данной форме очистятся рис.6.

Рисунок 6 – Очистка полей

При вводе пользователем не все данные в поля вылезает диалоговое сообщение о том что, «Поля в данной форме не все заполнены» рис.7.

Рисунок 7 – Диалоговое сообщение

Рисунок 8 – Таблица для формы «Авторизация»

Рисунок 9 – Таблица для формы «Регистрация»

  1. ЛИСТИНГ ПРОГРАММЫ
    1. NewJFrame.java.

package myclient;

import java.awt.HeadlessException;

import java.io.IOException;

import java.math.BigInteger;

import java.net.Socket;

import java.security.MessageDigest;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Arrays;

import javax.swing.JOptionPane;

public class NewJFrame1 extends javax.swing.JFrame {

public NewJFrame1() {

super("Авторизация");

initComponents();

setLocationRelativeTo(null);

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

if (jTextField1.getText().equals("") || jPasswordField1.getPassword().equals("") || jCheckBox1.isSelected() == false) {

JOptionPane.showMessageDialog(this, "Необходимо заполнить все поля!", "Ошибка", JOptionPane.ERROR_MESSAGE);

} else {

String userlogin = jTextField1.getText();

String userpassword = Arrays.toString(jPasswordField1.getPassword());

try {

MessageDigest md5 = MessageDigest.getInstance("MD5");

md5.update(userpassword.getBytes(), 0, userpassword.length());

userpassword = new BigInteger(1, md5.digest()).toString(16);

} catch (Exception e) {

System.out.println(e);

}

try {

Class.forName("org.sqlite.JDBC");

Connection conn = DriverManager.getConnection("jdbc:sqlite:D://db.s3db");

Statement stmt = conn.createStatement();

String insertData = "insert into users1 (userlogin, userpassword) values ('" + userlogin + "', '" + userpassword + "')";

stmt.execute(insertData);

} catch (ClassNotFoundException | SQLException | HeadlessException e) {

System.out.println(e);

JOptionPane.showMessageDialog(this, "Авторизация прошла успешно!");

}

this.setVisible(false);

NewJFrame frame2 = new NewJFrame();

frame2.setVisible(true); } }

  1.  
    1. NewJFrame.java.

package myclient;

import java.io.IOException;

import java.net.Socket;

import javax.swing.ButtonGroup;

import javax.swing.JOptionPane;

public class NewJFrame extends javax.swing.JFrame {

public NewJFrame() {

super("Регистрация");

initComponents();

setLocationRelativeTo(null);

ButtonGroup bg = new ButtonGroup();

bg.add(jRadioButton1);

bg.add(jRadioButton2);

jRadioButton1.setSelected(true);

ButtonGroup bg1 = new ButtonGroup();

bg1.add(jRadioButton3);

bg1.add(jRadioButton4);

jRadioButton3.setSelected(true);

jComboBox2.addItem("");

jComboBox2.addItem("1");

jComboBox2.addItem("2");

jComboBox2.addItem("3");

jComboBox2.addItem("4");

jComboBox2.addItem("5");

jComboBox2.addItem("6");

jComboBox3.addItem("");

jComboBox3.addItem("0");

jComboBox3.addItem("1");

jComboBox3.addItem("2");

jComboBox3.addItem("3");

jComboBox3.addItem("4");

jComboBox3.addItem("5");

jComboBox3.addItem("6");

jComboBox3.addItem("7");

jComboBox3.addItem("8");

jComboBox3.addItem("9");

jComboBox3.addItem("10");

jComboBox3.addItem("11");

}

@SuppressWarnings("unchecked")

//

private void initComponents() {

jLabel1.setText("Детский сад");

jRadioButton1.setText("муж");

jLabel4.setText("Укажите пол:");

jRadioButton2.setText("жен");

jLabel7.setText("Паспортные данные о родителях");

jLabel8.setText("Фамилия:");

jLabel9.setText("Имя:");

jLabel10.setText("Отчество:");

jLabel11.setText("Дата рождения:");

jLabel12.setText("Паспорт серия номер:");

jLabel13.setText("Дата выдачи:");

jLabel14.setText("Кем выдан:");

jLabel15.setText("Телефон:");

jLabel16.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N

jLabel16.setForeground(new java.awt.Color(255, 0, 0));

jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

jLabel16.setText("Данные о ребенке");

jLabel17.setText("Фамилия:");

jLabel18.setText("Имя:");

jLabel19.setText("Отчество:");

jLabel20.setText("Укажите пол:");

jRadioButton3.setText("муж");

jRadioButton4.setText("жен");

jLabel21.setText("Прописка:");

jLabel23.setText("Возраст:");

jLabel26.setText("Год/лет:");

jLabel27.setText("Месяц(ев):");

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

String reg = "";

String usersurname = jTextField2.getText();

if (usersurname.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "usersurname:" + usersurname + ";";

}

String username = jTextField3.getText();

if (username.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "username:" + username + ";";

}

String usermiddlename = jTextField4.getText();

if (usermiddlename.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "usermiddlename:" + usermiddlename + ";";

}

if (jRadioButton1.isSelected()) {

reg += "usergender:m;";

} else {

reg += "usergender:g;";

}

String data_r = jTextField5.getText();

if (data_r.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "data_r:" + data_r + ";";

}

String pasport = jTextField6.getText();

if (pasport.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "pasport:" + pasport + ";";

}

String data_v = jTextField7.getText();

if (data_v.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "data_v:" + data_v + ";";

}

String kem_v = jTextField8.getText();

if (kem_v.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "kem_v:" + kem_v + ";";

}

String telephon = jTextField9.getText();

if (telephon.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "telephon:" + telephon + ";";

}

String usersurname_ch = jTextField10.getText();

if (usersurname_ch.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "usersurname_ch:" + usersurname_ch + ";";

}

String username_ch = jTextField11.getText();

if (username_ch.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "username_ch:" + username_ch + ";";

}

String usermiddlename_ch = jTextField12.getText();

if (usermiddlename_ch.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "usermiddlename_ch:" + usermiddlename_ch + ";";

}

if (jRadioButton3.isSelected()) {

reg += "usergender1:m;";

} else {

reg += "usergender1:g;";

}

String propiska_ch = jTextField13.getText();

if (propiska_ch.equals("")) {

JOptionPane.showMessageDialog(this, "Заполнены не все поля!");

return;

} else {

reg += "propiska_ch:" + propiska_ch + ";";

}

if (jComboBox2.getSelectedItem().equals("")) {

reg += "year:Не указан;";

} else {

reg += "year:" + jComboBox2.getSelectedItem() + ";";

}

if (jComboBox3.getSelectedItem().equals("")) {

reg += "month:Не указан;";

} else {

reg += "month:" + jComboBox3.getSelectedItem() + ";";

}

try {

Socket soc = new Socket("localhost", 1992);

soc.getOutputStream().write((reg + "n").getBytes());

soc.close();

JOptionPane.showMessageDialog(this, "Регистрация прошла успешно!");

} catch (IOException e) {

JOptionPane.showMessageDialog(this, "Регистрация не выполнена!");

System.out.println(e);

}

jTextField2.setText(null);

jTextField3.setText(null);

jTextField4.setText(null);

jTextField5.setText(null);

jTextField6.setText(null);

jTextField7.setText(null);

jTextField8.setText(null);

jTextField9.setText(null);

jTextField10.setText(null);

jTextField11.setText(null);

jTextField12.setText(null);

jTextField13.setText(null);

jComboBox2.setSelectedItem (null);

jComboBox3.setSelectedItem (null);

jRadioButton1.setSelected(true);

jRadioButton3.setSelected(true); }

  1.  
    1. MyServer.java.

package myserver;

import java.awt.HeadlessException;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.StringTokenizer;

public class MyServer {

public static void main(String[] args) throws IOException {

try {

ServerSocket listenSocket = new ServerSocket(1992);

while (true) {

/* Динамические массивы для хранения параметров и их значений */

ArrayList parameters = new ArrayList();

ArrayList data = new ArrayList();

/* Получение сообщения от клиента */

Socket clientSocket = listenSocket.accept();

BufferedReader br = new BufferedReader(new InputStreamReader(

clientSocket.getInputStream()));

String s = br.readLine();

clientSocket.close();

/* Разбор сообщения на параметры и их значения */

StringTokenizer st = new StringTokenizer(s, ";");

while (st.hasMoreTokens()) {

String command = st.nextToken();

StringTokenizer st2 = new StringTokenizer(command, ":");

parameters.add(st2.nextToken());

data.add(st2.nextToken()); }

/* Запись данных в БД */

try {

Class.forName("org.sqlite.JDBC");

Connection conn = DriverManager.getConnection("jdbc:sqlite:D://db1.s3db");

Statement stmt = conn.createStatement();

String insertData = "insert into users (" + parameters.get(0) + ", " + parameters.get(1) + ", " + parameters.get(2) + ", " + parameters.get(3) + ","+parameters.get(4)+","+parameters.get(5) +","+parameters.get(6) +","+parameters.get(7) +","+parameters.get(8) +","+parameters.get(9) +","+parameters.get(10) +","+parameters.get(11) +","+parameters.get(12) +","+parameters.get(13) +","+parameters.get(14) +","+parameters.get(15) +") values ('" + data.get(0) + "', '" + data.get(1) + "', '" + data.get(2) + "', '" + data.get(3) + "', '" + data.get(4) + "', '" + data.get(5) + "', '" + data.get(6) + "', '" + data.get(7) + "', '" + data.get(8) + "', '" + data.get(9) + "', '" + data.get(10) + "', '" + data.get(11) + "', '" + data.get(12) + "', '" + data.get(13) + "', '" + data.get(14) + "', '" + data.get(15) + "')";

stmt.execute(insertData);

/* System.out.println(insertData);*/

} catch (ClassNotFoundException | SQLException | HeadlessException e) {

System.out.println(e);

} }

} catch (Exception e) {

System.out.println(e);

} } }

  1.  
    1. MyClient.java.

package myclient;

public class MyClient {

public static void main(String[] args) {

NewJFrame1 frame1 = new NewJFrame1();

frame1.setVisible(true); } }

20

Просмотров работы: 403