Разработка набора программ (сервер и клиент) , позволяющего реализовать общение в сети при помощи рисования

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Введение

В начале девяностых электронно-вычислительные машины использовались большей частью для делопроизводства, — в ходу были текстовые редакторы, электронные таблицы, разнообразные базы данных. Современный же компьютер, — прежде всего узел огромной межконтинентальной сети Internet. Это означает, что практически любые два человека могут общаться между собой, не смотря на расстояние. Среди множества задач, решаемых в Internet, самой актуальной остается организация общения людей. Ведь для общения недостаточно передавать простой текст, сказанного участником, необходимо организовать и передачу его эмоций. Все современные пользователи ПК сталкиваются с необходимостью отправлять данные другим пользователям, находящимся в локальной сети (либо в сети интернет), причем оперативность приема и передачи играет немаловажную роль. Таким образом, общение по электронной почте со временем уступило позиции в рейтинге самых используемых средств передачи информации чатам (англ. chatter -- болтать), простым в обращении и способным с помощью специального программного обеспечения обмениваться данными в режиме реального времени. Основная проблема связана с отсутствием методов передачи точных эмоций на расстояние. В различных чатах эту проблему решают по-разному: где-то пытаются заменить мимику лица последовательностью определенных символов, где-то используя манипулированием формата текста, его размер, шрифт, цвет. Одним из новых способов решения этой проблемы — графический чат. Его основная идея в организации передачи информации по средствам графического изображения, а не простым текстом.

Иногда общение людей носит конфидициальный характер, и общающиеся хотят сохранить свой диалог в тайне от остальных. Это привело к тому, что большое развитие получила криптография — наука призванная сохранить тайну передаваемых данных. В настоящее время существует огромное количество программного обеспечения призванного обеспечивать общение в сети, с различными степенями защиты от подслушивания. Цель данного курсового проекта разработка подобного приложения, представляющего собой графический многопользовательский чат с передачей данных в закодированном виде. Общение будет осуществляться при помощи прямых линий, создаваемых курсором мыши, особенностью будет являться авторизация пользователей.

1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ

Работая в сети Internet, мы очень часто встречаемся с разного рода многопользовательскими программами. Ими могут быть почтовые клиенты, чаты, форумы, FTP клиенты и т. п. Все эти приложения используют для своей работы разного рода протокола: FTP, POP, SMTP, HTTP, и т. д. Но базовым для них является единый протокол — TCP/IP. Типичное же приложение TCP/IP построено на клиент-серверной архитектуре.

ИСТОРИЯ ВОЗНИКНОВЕНИЯ ЧАТА:

Чат -- средство обмена сообщениями по компьютерной сети в режиме реального времени, а также программное обеспечение, позволяющее организовывать такое общение. Характерной особенностью является коммуникация именно в реальном времени или близкая к этому, что отличает чат от форумов и других «медленных» средств. То есть, если на форуме можно написать вопрос и ждать, пока кто-нибудь посчитает нужным на него ответить (в то же время, можно получить и несколько ответов сразу от разных пользователей), то в чате общение происходит только с теми, кто присутствует в нём в настоящий момент, а результаты обмена сообщениями могут не сохраняться. Вопросы общения интересовали людей всегда. Для того, чтобы можно было обмениваться информацией не только при личной встрече, но и на огромных расстояниях, люди изобретали всё новые и новые технические средства, организовывали почтовые системы, протягивали кабели через континенты и океаны, запускали спутники связи. С развитием информационных технологий стали возможным еще более глобальные коммуникации. Историческим предшественником чатов, несомненно, был телефон. Ни почта, ни телеграф не позволяли общаться в реальном времени и не были доступны в домашней обстановке. Изобретение и распространение телефона по планете вызвало настоящую революцию в средствах и способах общения. Во второй половине XX века начали бурно развиваться компьютеры. Однако долгое время они были большими и слишком дорогими, что препятствовало тому, чтобы расходовать драгоценное машинное время на забавы с обменом сообщениями вместо расчетов атомных бомб. К тому же, до конца 60-х годов они не были связаны друг с другом. Предок Интернета, сеть ARPANET, в 1969 году насчитывала только четыре связанных друг с другом научных компьютера. Чуть позже, в 1971 году, была придумана электронная почта, которая стала необычайно популярна ввиду своего удобства. Постепенно появились новые службы сообщений, такие, как списки почтовой рассылки, новостные группы и доски объявлений. Однако в то время сеть ARPANET ещё не могла легко взаимодействовать с другими сетями, построенными на других технических стандартах, что затрудняло её распространение. Но тем не менее, эта проблема вскоре была решена после перехода сетей на протокол обмена данными TCP/IP, который успешно применяется до сих пор. Именно в 1983 году термин «Интернет» закрепился за сетью ARPANET.

Программы для обмена текстовыми строками, несмотря на простоту самой идеи, появились не сразу. По-настоящему популярным стал разработанный в 1988 году протокол, названный Internet Relay Chat (IRC), что примерно можно перевести как ретранслируемый интернет-разговор. Где-то в это же время появилось и распространилось само понятие «чат». Общение в IRC быстро стало популярным из-за простоты процесса и дружественности среды. Для клиентов IRC, написано множество ботов, например, Eggdrop, автоматизирующие многие рутинные операции. Самым известным из клиентов IRC стал mIRC; благодаря простой и эффективной системе команд для него было написано множество скриптов, которые также позволяют выполнять широкий спектр действий. Разработчики IRC настолько хорошо продумали его архитектуру, что её с тех пор практически не требовалось изменять. Конечно, у него есть недостатки: короткие сообщения, проблема с кодировками, невозможность посмотреть историю сообщений при подключении. Однако он был и остаётся популярным средством для чата, хотя и в значительной мере потеснен со своих позиций. В частности, в 1998 году был придуман похожего назначения протокол Jabber — даже его название (англ. jabber болтовня, трёп; тарабарщина) отсылало к слову chat. Jabber содержал в себе многие технические новшества и постепенно получил широкое распространение, а также стал основой многих сервисов. Были и другие протоколы, менее известные, например, SIP.

Существует несколько разновидностей программной реализации чатов:

HTTP или веб-чаты. Такой чат выглядит как обычная веб-страница, где можно прочесть последние несколько десятков фраз, написанные участниками чата и модераторами. Чаты, использующие технологию Adobe Flash. Вместо периодической перезагрузки страницы, между клиентом и сервером открывается сокет, что позволяет моментально отправлять или получать сообщения, расходуя меньше трафика.

2. СТРУКТУРНОЕ ПРОЕКТИРОВАНИЕ

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

Разрабатываемое приложение будет написано на языке высокого уровня С++ с использованием возможностей WinAPI. Это означает, что для работы с графической составляющей приложения потребуются общие для таких приложений типы данных. Это HINSTANCE и HWND — дескриптор экземпляра приложения, получаемый при запуске приложения, и дескрипторы главного и дочерних окон. Еще одним важным взаимодействием клиента и сервера является передача и отображение информации. Для этого клиент будет присылать сообщение серверу, а сервер в свою очередь будет отсылать остальным активным клиентам.

Для возможности перерисовки главного окна клиента и корректного отображения графической информации полученной от пользователей в сети будем хранить эту информацию в динамическом массиве структур, для чего потребуется в разработке клиента свой тип данных MapDisp. Этот тип будет состоять из четырех полей типа int и одного типа указателя на MapDisp. В полях типа int будут храниться координатылинии х0, y0, x1, у1. В указателе будет храниться либо указатель на следующую за отображаемым элементом фигуру, либо NULL, что будет означать, что данный элемент последний в списке. Этот указатель передаваться не будет. Для возможности обращаться к списку и добавлять или удалять элементы потребуется два указателя типа MapDisp на начало и конец данного списка: frstMиlastM. Таким образом, передаваться будет структура MapDisp без указателя на следующую запись и выработанная им вставка. Вся необходимая информация будет заноситься в буфер для передачи в соответствующем порядке непосредственно перед отправлением. Программа-сервер будет получать данные уже в закодированной форме и рассылать их. Также она будет хранить в файле базу пользователей и паролей и при подключении нового клиента будет происходить проверка имени и пароля в соответствии с базой.

3. ФУНКЦИОНАЛЬНОЕ ПРОЕКТИРОВАНИЕ

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

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

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

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

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

Часть программа-сервер. Её можно разделить на две основные функциональные части:

инициализация сервера и прослушивание выделенного канала на запрос о новом подключении;

работа с уже подключенными клиентами.

Операции выполняемые первой функциональной частью следующие:

инициализация библиотеки winsock для работы с сокетами;

создание сокета, получение собственного IP-адреса в сети и привязка к нему созданного сокета;

прослушивание созданного сокета на наличие новых клиентов и их подключение;

чтение из файла имен пользователей и их паролей, а также их авторизация при новом подключении.

Операции выполняемые второй функциональной частью:

ожидание новых данных от клиентов;

удаление информации об отключившихся клиентах;

рассылка полученных новых данных всем подключенным клиентам.

Также сервер показывает от кого пришли данные и кому они отправлены, и указывается время проведения операций.

Часть программа-клиент. Так как клиентская часть работает с изображениями и выполняет основные задачи по работе с передаваемыми данными её структура будет значительно сложнее чем у сервера.

Можно выделить следующие обобщенные части:

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

часть отвечающая за работу с сетью;

часть выполняющая функции шифрования и дешифрования данных.

Рассмотрим более подробно функции первой части:

создание и отображение главного окна;

создание и отображение пользовательского интерфейса;

рисование новых элементов и перерисовка старых.

Сетевая часть:

инициализация библиотеки winsock;

создание сокета;

установление или разрыв соединения;

отправка серверу данных;

ожидание новых данных от сервера и извещение об их получении основного модуля программы.

Часть, отвечающая за безопасность соединения:

кодирование и декодирование данных.

4. РЕАЛИЗАЦИЯ ФУНКЦИОНАЛЬНЫХ ЧАСТЕЙ

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

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

Алгоритм отправления сообщений: данный алгоритм будет различным для клиента и сервера.

Клиент перед отправлением данных собирает всю необходимую информацию в буфер для отправления, который затем шифруется. Зашифрованная информация отправляется серверу по установленному соединению.

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

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

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

Алгоритм декодирования сообщений:

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

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

Отсюда название механического устройства -- ротор, или роторная машина. Предположим, что коммутация диска задает подстановку abcdefghijklmnopqrs tuvwxyz

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

abcdefghijklmnopqr stuvwxyz MKGOYDSIPELUAVCRJWXZNHBQFT

Для третьей буквы используется очередная подстановка: abcdefghijklmnopq rstuvwxyz KGOYDSIPELUAVCRJWXZNHBQFTM и т. д. Все это дает нам поли-алфавитный шифр замены с 26 алфавитами.

Наиболее знаменитой из роторных машин была машина «Энигма». Машины, применяемые в конце войны, имели большее число дисков, выбираемых из большего набора перестановок. При каждом повороте первого ротора соединенное с ним кольцо попадает в паз второго диска и толкает его. Аналогично пошаговые итерации третьего ротора контролируются вторым ротором. Оба кольца подвижны, и их положения тоже формируют часть пространства ключей. Число всех положений двух колец составляет= 676. За счет вращения дисков конкретная буква текста замещалась разными символами при каждом нажатии на клавишу.

Преобразование Энигмы для каждой буквы может быть определено математически как результат перестановок. Рассмотрим трёх-роторную армейскую модель. Положим, что P обозначает коммутационную панель, U обозначает отражатель, а L, M, R обозначают действия левых, средних и правых роторов соответственно. Тогда шифрование E может быть выражено как:

E = PRMLUL? 1M? 1R? 1P? 1

После каждого нажатия клавиш ротор движется, изменяя трансформацию. Например, если правый ротор R проворачивается на i позиций, происходит трансформация сiRс? i, где с -- циклическая перестановка, проходящая от A к B, от B к C, и так далее. Таким же образом, средний и левый ротор могут быть обозначены как j и k вращений M и L.

Для шифрования будут использоваться следующие диски с алфавитами:

123 456 789 — открытый алфавит;

5 678 914 230 — первый ротор;

9 357 684 201 — второй ротор;

3 574 068 912 — третий ротор.

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

Интерфейс с пользователем будет включать в себя поле для рисования

и кнопку подключения/отключения.

Кнопка подключения/отключения позволяет подключиться или отключиться от сервера. При подключении необходимо ввести адрес сервера в всплывающем окне:

Рисунок 4. 1

Затем если соединение с сервером установлено, появляется окно авторизации, где необходимо ввести имя и пароль без пробелов. :

Рисунок4. 2

При наличии каких либо ошибок будет выведено соответствующее окно:

Рисунок4. 3

Разрабатывать тестовые примеры будем одновременно для сервера и клиента и в такой последовательности, которая соответствует работе программы. Для простоты и удобства будем записывать тестовые примеры по пунктам.

Тестовые примеры:

При нажатии кнопки «Подкл/Откл» должно появиться окно, где необходимо будет ввести IP-адреса сервера.

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

При использовании пробела в имени пользователя или пароле должно быть выведено соответствующее предупреждение.

При неправильном имени или пароле должно быть выведено соответствующее предупреждение.

Приложение-сервер при запуске должно вывести информацию о процессе создания сервера и о компьютере, на котором запущено: его IP-адрес и имя в сети.

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

В процессе общения сервер отображает адрес клиента, последним добавившего изображение, адреса клиентов, которым отправлены данные, а также время.

При отключении клиента сервер и клиент должны известить об этом событии.

При закрытии сервера клиент должен сообщить об исчезновении связи пользователю.

Рисунок 4. 4

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

Опишем основные принципы работы с разрабатываемым приложением:

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

Приложение в ходе работы создаст сокет, «привяжет» к нему свой IP и будет ожидать клиентов.

Для общения с другими клиентами необходимо запустить клиентскую часть. Однако даже без установленного соединения возможно рисование.

Для установления соединения нажимаем кнопку «Подкл/Откл»

В появившемся окне вводим IP-адрес сервера. Если такой сервер существует, то будет выведен запрос на авторизацию. В случае успешной авторизации появится сообщение об успешном установлении соединения.

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

Для разрыва соединения следует нажать ту же кнопку.

После завершения операции по разрыву соединения, появившееся окно уведомит об этом.

При попытке установить соединение с несуществующим сервером или при разрыве соединения появится сообщение об ошибке с информацией об вызвавших её причинах.

5. ТЕСТИРОВАНИЕ И АНАЛИЗ РЕЗУЛЬТАТОВ

Проведем запланированные в пункте тесты и их анализ. Проводимые тесты также будем записывать по пунктам:

При нажатии кнопки «Подкл/Откл» появляется окно для ввода IP-адреса сервера.

Рисунок 5.1 — Поле для ввода IP-адреса сервера

После подключения к серверу должно быть выведено окно авторизации.

Рисунок 5.2 — Окно авторизации

При использовании пробела в имени пользователя или пароле должно быть выведено соответствующее предупреждение.

Рисунок 5.3 — Пробел в имени пользователя

При неправильном имени или пароле должно быть выведено соответствующее предупреждение.

Рисунок 5.4 — Неверные имя и пароль

Приложение-сервер при запуске должно вывести информациюо процессе создания сервера и о компьютере, на котором запущено: его IP-адрес и имя в сети.

Рисунок 5.5 — Запуск сервера

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

Рисунок 5.6 — Успешное подключение

В процессе общения сервер отображает адрес клиента, последним добавившего изображение, адреса клиентов, которым отправлены данные, а также время.

Рисунок 5.7 — Общение

При отключении клиента сервер и клиент должны известить об этом событии.

Рисунок 5.8 — Отключение клиента

При закрытии сервера клиент должен сообщить об исчезновении связи пользователю.

Рисунок 5.9 — Отключение сервера

ЗАКЛЮЧЕНИЕ

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

В результате выполнения курсового проекта был получен набор программ (сервер и клиент) позволяющий реализовать общение в сети при помощи рисования как геометрических объектов, так и простого рисования. По результатам тестирования было установлено, что все запланированные для реализации возможности работают должным образом.

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

СПИСОК ЛИТЕРАТУРЫ

Архангельский А.Я. «Программирование в С++ Builder 6» Москва, Бином, 2003 г.

http: //ru. wikipedia. org

Павловская Т.А. «С/С++. Программирование на языке высокого уровня.».- СПб.: Питер, 2007 г.

Шилдт Г. «Си для профессиональных программистов». Москва 1989 г.

Юрий Щупак. Win32 API. «Питер пресс».

ПоказатьСвернуть
Заполнить форму текущей работой