Как сделать клиент серверное приложение

Обновлено: 04.07.2024

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 22.08.2016
Размер файла 4,7 M

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Введение

Кроме того, в наше время большой популярностью пользуются кросс-платформенные программные продукты. Кросс-платформенность позволяет потребителю не ограничивать свой выбор на конкретной платформе, а использовать ту платформу, которая наиболее отвечает его требованиям.

1. Постановка задачи

Для решения поставленной задачи необходимо создать клиент-серверное приложение, которое должно обеспечить:

- передачу файлов от клиента к клиенту, управление процессом передачи;

- авторизацию клиента (сотрудника) на сервере безопасным способом (без возможности перехвата пароля);

- смену пароля клиента (сотрудника), статуса и базовой пользовательской информации (хранимой на сервере и выдаваемой по запросу);

- хранение и выдачу списка собеседников (сотрудников) по запросу клиента;

- оповещение всех других клиентов (сотрудников), активных на данный момент, о добавлении нового сотрудника, удалении сотрудника, смене пользовательской информации;

- возможность (с помощью специального администрирующего клиента):

1) получать администратору (root) доступ к серверу безопасным способом;

2) менять пароль администратора по запросу;

3) создавать, переименовывать и удалять группы сотрудников;

4) менять принадлежность группы или сотрудника к другой группе;

5) создавать и удалять UIN'ы сотрудников, сбрасывать пароль с UIN'а;

7) выключить сервер.

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

Система должна быть платформонезависимой (относительно Windows, Linux), а, следовательно, должна быть разработана с использованием кросс-платформенного инструментария.

Разрабатываемая система должна представлять собой комплекс программ:

- сервер - программа, принимающая запросы от клиентов;

- администрирующий клиент - программа, позволяющая системному администратору (после процедуры аутентификации) производить административные действия на сервере (перечислены выше);

Основные возможности сервера:

- безопасная аутентификация учётных записей;

- хранение списка контактов пользователей на сервере с возможностью группировки по группам/отделам/подразделениям;

- хранение анкетных данных пользователей;

- рассылка статусов присутствия пользователей;

- удалённое администрирование сервера;

Основные возможности клиента:

- серверный список контактов с поддержкой иерархии групп;

- передача файлов и управление процессом;

- продуманный и удобный пользовательский интерфейс;

- запуск свернутым в системный лоток с автоматическим подключением к серверу;

- смена анкетных данных пользователя.

Основные возможности администрирующего клиента:

- создание и редактирование иерархии групп;

- добавление и удаление сотрудников;

- сброс пароля с UIN;

- смена принадлежности группы/сотрудника другой родительской группе;

- смена пароля администратора;

2. Исследование предметной области

2.1 Обзор существующих технологических решений

- OBIMP - открытый протокол, используемый системой Bimoid (клиент + сервер) [1]. Bimoid разработан исключительно под Windows (клиент может быть запущен с использованием стороннего WinAPI - например, wine), и не удовлетворяет требованию кросс-платформенности.

- Skype, MySpace, QQ и другие - закрытые протоколы, используемые в клиентах и серверах, разрабатываемых коммерческими организациями. Данные организации регулярно вносят изменения в свои протоколы, после чего альтернативные (сторонние) клиенты перестают работать на этих протоколах. Ранее подобная ситуация неоднократно наблюдалась и на протоколе OSCAR (ICQ).

2.2 Обоснование выбора собственного технологического решения

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

Для разработки клиент-серверного приложения в качестве инструментария целесообразно выбрать язык С++ с использованием программного интерфейса Socket API (для Windows - Winsock), набора компонентов для создания графического интерфейса Qt Framework 4.х и библиотеки криптографических алгоритмов Crypto++. Данный инструментарий, при условии соблюдения всех требований к функциональности и эффективности разрабатываемого приложения, обеспечит следующие достоинства:

- аутентификация с использованием криптографического алгоритма RSA обеспечивает необходимый уровень безопасности в системе;

- передача файлов посредством собственного сервера исключает необходимость использования сторонних сервисов;

- простота реализации отдельных компонентов системы и отсутствие перегруженности разрабатываемого протокола возможностями, ненужными для корпоративной переписки (и свойственными другим, более известным протоколам данной области - OSCAR, Jabber), позволяет снизить нагрузку как на компьютер, выступающий в роли сервера, так и компьютеры клиентов (сотрудников);

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

2.3 Описание выбранных средств разработки

клиент серверный приложение

2.3.1 Языки программирования

C++ -- компилируемый статически типизированный язык программирования общего назначения [5]. Он поддерживает такие парадигмы программирования как процедурное программирование, объектно-ориентированное программирование, обобщенное программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником -- языком C, -- наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие.

Синтаксис C++ унаследован от языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.

HTML (англ. сокр. HyperText Markup Language - язык гипертекстовой разметки). На этом языке браузеру сообщается, какой именно текст и другие элементы (картинки, таблицы, формы) и каким образом нужно отображать на странице. На языке HTML не программируют, а верстают - особым образом размечают текст для публикации в интернете.

Средствами HTML задаются синтаксис и размещение специальных встроенных указаний, в соответствии с которыми браузер отображает содержимое документа: текст, изображения и данные других типов, поддерживаемых данным браузером.

2.3.2 Технологии

Понятие сокета.

Сомкеты -- название программного интерфейса для обеспечения обмена данными между процессами [6]. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет -- абстрактный объект, представляющий конечную точку соединения.

Следует различать клиентские и серверные сокеты. Клиентские сокеты грубо можно сравнить с оконечными аппаратами телефонной сети, а серверные -- с коммутаторами. Клиентское приложение (например, браузер) использует только клиентские сокеты, а серверное (например, веб-сервер, которому браузер посылает запросы) -- как клиентские, так и серверные сокеты.

Рисунок 2.1 - Взаимодействие процессов при помощи TCP-сокетов

Интерфейс сокетов впервые появился в BSD Unix. Программный интерфейс сокетов описан в стандарте POSIX.1 и в той или иной мере поддерживается всеми современными операционными системами.

Принцип работы сокетов.

Каждый процесс может создать слушающий сокет (серверный сокет) и привязать его к какому-нибудь порту операционной системы (в UNIX непривилегированные процессы не могут использовать порты меньше 1024). Слушающий процесс обычно находится в цикле ожидания, то есть просыпается при появлении нового соединения. При этом сохраняется возможность проверить наличие соединений на данный момент, установить тайм-аут для операции и т.д.

Каждый сокет имеет свой адрес. ОС семейства UNIX могут поддерживать много типов адресов, но обязательными являются INET-адрес и UNIX-адрес. Если привязать сокет к UNIX-адресу, то будет создан специальный файл (файл сокета) по заданному пути, через который смогут сообщаться любые локальные процессы путём чтения/записи из него (см. Доменный сокет Unix). Сокеты типа INET доступны из сети и требуют выделения номера порта.

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

Рисунок 2.2 - Клиентский сокет, впускающий сокет и сокет соединения

Berkly Sockets API.

Сокеты Беркли -- интерфейс программирования приложений (API), представляющий собой библиотеку для разработки приложений на языке Си с поддержкой межпроцессного взаимодействия (IPC), часто применяемый в компьютерных сетях [7].

API сокетов Беркли сформировал de facto стандарт абстракции для сетевых сокетов. Большинство прочих языков программирования используют интерфейс, схожий с API языка Си.

Интерфейс сокета Беркли -- API, позволяющий реализацию взаимодействия между компьютерами или между процессами на одном компьютере. Данная технология может работать с множеством различных устройств ввода/вывода и драйверов, несмотря на то, что их поддержка зависит от реализации операционной системы. Подобная реализация интерфейса лежит в основе TCP/IP, благодаря чему считается одной из фундаментальных технологий, на которых основывается Интернет. Технология сокетов впервые была разработана в Калифорнийском университете Беркли для применения на Юникс-системах. Все современные операционные системы имеют ту или иную реализацию интерфейса сокетов Беркли, так как это стало стандартным интерфейсом для подключения к сети Интернет.

Программисты могут получать доступ к интерфейсу сокетов на трёх различных уровнях, наиболее мощным и фундаментальным из которых является уровень сырых сокетов. Довольно небольшое число приложений нуждается в ограничении контроля над исходящими соединениями, реализуемыми ими, поэтому поддержка сырых сокетов задумывалась быть доступной только на компьютерах, применяемых для разработки на основе технологий, связанных с Интернет. Впоследствии, в большинстве операционных систем была реализована их поддержка, включая Windows XP.

Winsock.

Windows Sockets API (WSA, также известный как Winsock) - это техническая спецификация, которая определяет, как сетевое программное обеспечение Windows будет получать доступ к сетевым сервисам, в том числе, TCP/IP [8]. Он определяет стандартный интерфейс между клиентским приложением (таким как FTP клиент или веб-браузер) и внешним стеком протоколов TCP/IP. Он основывается на API модели сокетов Беркли, использующейся в BSD для установки соединения между программами.

Qt Framework.

Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.

Существуют версии библиотеки для Microsoft Windows, систем класса UNIX с графическими подсистемами X11 и Wayland, iOS, Android, Mac OS X, Microsoft Windows CE, QNX, встраиваемых Linux-систем и платформы S60. В данный момент рассматривается возможность внедрения поддержки Qt в Windows Phone. Также идёт портирование на Haiku.

Начиная с версии 4.5 Qt распространяется по 3 лицензиям (независимо от лицензии, исходный код Qt один и тот же):

- Qt Commercial -- для разработки ПО с собственнической лицензией, допускающая модификацию самой Qt без раскрытия изменений;

- GNU GPL -- для разработки ПО с открытыми исходниками, распространяемыми на условиях GNU GPL;

- GNU LGPL -- для разработки ПО с собственнической лицензией, но без внесения изменений в Qt.

Со времени своего появления в 1996 году библиотека Qt легла в основу тысяч успешных проектов во всём мире. Кроме того, Qt является фундаментом популярной рабочей среды KDE, входящей в состав многих дистрибутивов Linux.

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

Рисунок 2.3 - Схема создания исполняемого модуля в Qt 4.x

Crypto++ (также известный как CryptoPP, libcrypto++, и libcryptopp) - свободная и открытая библиотека классов С++, содержащая криптографические алгоритмы и схемы, написанная Wei Dai [11]. Crypto++ широко используется в научных, учебных проектах, открытых и некоммерческих проектах, а также коммерческих. Созданная в 1995 году, библиотека полностью поддерживает 32-битные и 64-битные архитектуры для большинства операционных систем, включая Apple (Mac OS X и iOS), BSD, Linux, Solaris, и Windows. Проект также поддерживает компиляцию под различными компиляторами и IDE, включая Borland Turbo C++, Borland C++ Builder, Clang, CodeWarrior Pro, GCC (ключая Apple GCC), Intel C++ Compiler (ICC), Microsoft Visual C/C++, и Sun Studio.

Из этой библиотеки для решения поставленной задачи окажутся полезными: реализация криптографического алгоритма RSA [12], блокового шифра Rijndael [13], а также хэш-функции MD5 (для проверки корректности отправленного файла на принимающей стороне).

В качестве IDE была выбрана среда разработки Qt Creator 2.6, в качестве компиляторов - GCC 4.7 (Linux) и MinGW 4.4 (Windows). Для сборки установщика будет использоваться NSIS (Nullsoft Scriptable Install System) 2.46 (Windows). Для ОС Linux будут собраны deb-пакеты.

Читайте также: