Динамическая связь приложений через библиотеку классов
Порядок работы с динамически связанными приложениями, когда одно приложение способно и может передавать данные в другое приложение. Создание библиотеки классов удалённого объекта: клиент (приложение Windows Forms) и сервер (консольное приложение).
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 11.04.2017 |
Размер файла | 2,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Лабораторная работа
на тему: Динамическая связь приложений через библиотеку классов
Содержание
1. Вводная часть
2. Удалённый объект: создание библиотеки классов удалённого объекта
3. Клиент: создание приложения Windows Forms
4. Сервер: создание консольного приложения
5. Завершающая часть
6. О приложении к Лабораторной работе
1. Вводная часть
В этой работе будет рассмотрена работа с динамически связанными приложениями. Нас интересует именно те случаи, когда одно приложение способно и может при необходимости передавать данные в другое приложение, причём оба приложения запущены в один и тот же момент и для передачи данных не используются временные файла на жёстком диске. Фактически приложения будут общаться друг с другом словно клиент и сервер. То есть это общение будет аналогично общению между удалёнными машинами (через протоколы HTTP, FTP или TELNET). Для реализации данной функциональности лучше всего использоваться так называемые «каналы».
Для чего может понадобится подобное? Динамическая связь приложений как удалённо, так и на локальной машине удобна для передачи малых объёмов информации. При этом данные передаются по защищённому каналу (данные можно предварительно зашифровать тем же MD5-хэшем). Также, такая связь приложений не оставляет лишнего «мусора» изначально. А также, возможно реализовать удалённое взаимодействие клиента и сервера.
Что такое каналы?
Каналы используются инфраструктурой удалённого взаимодействия платформы .NET Framework для передачи удаленных вызовов. Если клиент вызывает удаленный объект, вызов «сериализуется» (перевод структуры данных в последовательность битов) в сообщение, которое отправляется по клиентскому каналу, а получается по каналу сервера. После получения сообщения, оно «десериализуется» и обрабатывается. Возвращаемые значения передаются по каналу сервера, а их получение производится по каналу клиента.
Класс IpcChannel является удобным классом, в котором сочетаются функциональные возможности класса IpcClientChannel и класса IpcServerChannel.
Для работы с каналами нам потребуются следующие пространства имён:
1. Обеспечивает реализацию канала, который использует протокол межпроцессорного взаимодействия для передачи сообщений.
Пространство имён: System.Runtime.Remoting.Channels.Ipc;
Сборка: System.Runtime.Remoting (в System.Runtime.Remoting.dll).
2. А также основные пространства имён:
System.Runtime.Remoting;
System.Runtime.Remoting.Channels;
Что такое IPC ?
Межпроцессное взаимодействие (Inter-Process Communication, IPC) -- набор способов обмена данными между множеством потоков в одном или более процессах. Процессы могут быть запущены на одном или более компьютерах, связанных между собой сетью. IPC-способы делятся на методы обмена сообщениями, синхронизации, разделяемой памяти и удалённых вызовов (RPC). Методы IPC зависят от пропускной способности и задержки взаимодействия между потоками и типа передаваемых данных.
IPC также может упоминаться как межпотоковое взаимодействие (inter-thread communication), межпоточное взаимодействие и межпрограммное взаимодействие (inter-application communication). IPC наряду с концепцией адресного пространства является основой для разграничения адресного пространства.
Что будет представлять собой приложение, разрабатываемое в данной работе ? Первое приложение будет представлять собой окно пустое Windows Forms. Так будет реализован клиент. Реализация сервера будет в виде консольного окна. Удалённый объект будет сформирован в виде библиотеки классов. Всего три проекта и три готовых объекта, два из которых -- приложения.
2. Удалённый объект: создание библиотеки классов удалённого объекта
Запускаем Visual Studio 2010, откроется Начальная страница:
Для начала, надо создать первый проект, для этого выполним последовательно: Файл -> Создать -> Проект… (также можно просто нажать сочетание клавиш Ctrl+Shift+N или пункт «Создать проект…» на Начальной странице):
Рис. 2.1 Создание нового проекта
Выберем слева в пункте Установленные шаблоны язык Visual C#, далее найдём в списке Библиотека классов. Также здесь можно выбрать какой использовать «фреймворк» (набора компонентов для написания программ). В нашем случае выберем .NET Framework 4.
Рис. 2.2 Окно создания нового проекта
В поле Имя вводим LWP11-RemoteObject -- это название программы (выбрано по названию лабораторного практикума, номеру и названию работы, через тире в названии обозначаем принадлежность будущего приложения). В поле Расположение указана конечная директория, где будет находиться весь проект. Выберем расположение удобное для быстрого поиска. В поле Имя решения вводится либо название программы «по умолчанию» из поля Имя автоматически, либо можно ввести своё собственное. Под этим именем будет создана конечная папка проекта (если Имя и Имя решения разные).
Рис. 2.3 Вводим данные нового проекта библиотеки классов
После нажатия клавиши ОК мы увидим сформированный проект и исходный код библиотеки классов (не пустой изначально).
Рис. 2.4 Обозреватель решений: состав проекта библиотеки классов сформированного средой разработки
Теперь, можно откомпилировать созданную программу, нажав клавишу F6 (Построение -> Построить решение). Тем самым мы собираем библиотеку в DLL-файл (и производим компиляцию debug-версии библиотеки) (Debug выбрано изначально).
Рис. 2.5 Скомпилированная библиотека классов по конфигурации Debug
Теперь вставим место всего кода единственного файла Class1.cs следующий код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LWP11_RemoteObject
{
public interface IRemoteSend1
{
void Send(int x, int y);
}
public interface IRemoteSend2
{
void Send(int x, string y);
}
}
Сам файл Class1.cs переименуем в LWP11RO.cs. Для переименования необходимо выделить файл в обозревателе решений, далее нажать F2 на клавиатуре, либо щёлкнуть правой кнопкой мыши на файле, далее в выпадающем списке найти Переименовать.
«Перестроим» нашу библиотеку, нажав клавишу F6 (Построение -> Построить решение) но уже по конфигурации Release (для этого выбираем другую конфигурацию: в выпадающем списке Конфигурация решения). Тем самым мы собираем библиотеку в DLL-файл (и производим компиляцию уже release-версии библиотеки).
Найдём откомпилированную библиотеку классов и поместим её в любое удобное место на диске (для последующего быстрого поиска).
3. Клиент: создание приложения Windows Forms
Снова запускаем Visual Studio 2010, откроется Начальная страница:
Для начала, надо создать проект, для этого выполним последовательно: Файл -> Создать -> Проект… (также можно просто нажать сочетание клавиш Ctrl+Shift+N или пункт «Создать проект…» на Начальной странице).
Выберем слева в пункте Установленные шаблоны язык Visual C#, далее найдём в списке Приложение Windows Forms. Также здесь можно выбрать какой использовать «фреймворк» (набора компонентов для написания программ). В нашем случае выберем .NET Framework 4.
В поле Имя вводим LWP11-Client -- это название программы (выбрано по названию лабораторного практикума, номеру и названию работы, через тире в названии обозначаем принадлежность будущего приложения). В поле Расположение указана конечная директория, где будет находиться весь проект. Выберем расположение удобное для быстрого поиска. В поле Имя решения вводится либо название программы «по умолчанию» из поля Имя автоматически, либо можно ввести своё собственное. Под этим именем будет создана конечная папка проекта (если Имя и Имя решения разные).
Рис. 3.1 Вводим данные нового проекта приложения Windows Forms
После нажатия клавиши ОК мы увидим сформированный проект и исходный код приложения Windows Forms (не пустого изначально).
Рис. 3.2 Обозреватель решений: состав проекта приложения Windows Forms сформированного средой разработки
Теперь, можно откомпилировать созданную программу, нажав клавишу F5 (Отладка -> Начать отладку или нажав на иконку . Тем самым мы запускаем приложение в режиме отладки (и производим компиляцию debug-версии программы) (Debug выбрано изначально).
Рис. 3.3 Запуск приложения Windows Forms по конфигурации Debug
Модифицируем приложение. Для начала изменим размер нашей единственной формы. Для этого можно потянуть за уголок в нужном направлении на странице визуального представления формы1. Но также размер можно менять на панели свойств этой формы. Для этого нужно поменять значение размера в пикселях (высоту и ширину) в поле Size.
ПРИМЕЧАНИЕ № 1: Для перехода на визуальное представление формы, необходимо двойным нажатием в обозревателе решений нажать на значок формы () или выбрать вкладку на панели вкладок с именем <имя формы>.cs [Конструктор].
Задаём следующие параметры формы на панели Свойства:
(Name) |
изменим с Form1.cs2 на LWP11Main |
|
^ Поменяем внутреннее имя формы. |
||
Text |
изменим с Form1 на Динамическая связь приложений (C#) :: Клиент |
|
^ Поменяем заголовок формы (то что отображается в шапке приложения слева). |
||
Icon |
изменим изображение (иконку) приложения |
|
^ Необходим файл значка *.ico. |
||
Size |
изменим со значений 300; 300 на 500; 200 |
|
^ Поменяем размер формы. |
ПРИМЕЧАНИЕ № 2: Для того, чтобы поменять имя файла нашей формы, необходимо выполнить следующее: выделить в обозревателе решений значок формы () и нажать правую кнопку мыши, затем выбрать Переименовать. Ввести необходимое новое имя СОХРАНЯЯ расширение *.cs. После смены имени, автоматически поменяются имена проассоциированных непосредственно с формой файлов:
Получим нечто подобное:
Рис. 3.4. Модифицированная форма приложения
Теперь необходимо добавить удалённый объект в качестве Ссылки. Выполним: Проект -> Добавить ссылку, либо ПКМ на Ссылки в обозревателе решений, далее Добавить ссылку...:
В открывшемся окне перейдём на вкладку Обзор, укажем путь к библиотеке классов, которую мы уже скомпилировали:
Рис. 3.5 Добавить ссылку: выбор нужного объекта, а именно ранее скомпилированной библиотеки классов: LWP11-RemoteObject.dll
Жмём ОК. Удалённый объект добавлен в наше приложение и теперь можно работать с классами, предоставленными этим объектом:
Теперь приступим к формированию элементов и их функциональности. Для начала расставим элементы как показано на рисунке ниже:
Рис. 3.6 Расстановка элементов на форме (на форме LWP11Main проекте LWP11-Client)
Здесь два простых TextBox и два Label.
По порядку распишем Свойства каждого элемента:
TextBox: |
||
(Name): |
TB_1 |
|
Size: |
30; 20 |
|
TextBox: |
||
(Name): |
TB_2 |
|
Size: |
30; 20 |
Теперь отправляемся в код формы (правая кнопка мыши на значке формы, далее Перейти к коду или нажмём на клавишу F7):
В самое начало кода добавим:
using LWP11_RemoteObject; // Подключаем объект
Найдём:
public partial class LWP11Main : Form
{
Добавим после:
// Переменная для объекта
private IRemoteSend1 _rs1;
private IRemoteSend2 _rs2;
Событие KeyPress верхнего TextBox:
private void TB_1_KeyPress(object sender, KeyPressEventArgs e)
{
// Введённые символы должны быть только цифрами, иначе ввода не будет (символ не введётся)
if (!Char.IsDigit(e.KeyChar))
{ динамический связь клиент сервер
e.Handled = true;
}
}
Событие KeyPress нижнего TextBox:
private void TB_2_KeyPress(object sender, KeyPressEventArgs e)
{
// Введённые символы должны быть только буквами, иначе ввода не будет (символ не введётся)
if (!Char.IsLetter(e.KeyChar))
{
e.Handled = true;
}
}
Событие MouseClick формы LWP11Main:
private void LWP11Main_MouseClick(object sender, MouseEventArgs e)
{
// Получаем объект
_rs1 = (IRemoteSend1)Activator.GetObject(typeof(IRemoteSend1), "ipc://4567/RemoteSend1.rem"); // Открываем первый канал
// Передаём координаты нажатия ЛКМ
try
{
_rs1.Send(e.X, e.Y);
}
catch { }
}
Последнее событие TextChanged нижнего TextBox:
private void TB_2_TextChanged(object sender, EventArgs e)
{
// Получаем объект
_rs2 = (IRemoteSend2)Activator.GetObject(typeof(IRemoteSend2), "ipc://4567/RemoteSend2.rem"); // Открываем первый канал
// Передаём данные из TextBox
try
{
_rs2.Send(Convert.ToInt16(TB_1.Text), TB_2.Text);
}
catch { }
}
Компилируем приложение (Release) и запускаем. Проверяем работоспособность текстовых полей. Вводим в верхнее только цифры, в нижнее только буквы:
Рис. 3.7 Окончательная работа приложения-клиента (LWP11-Client.exe)
4. Сервер: создание консольного приложения
Снова запускаем Visual Studio 2010, откроется Начальная страница:
Для начала, надо создать проект, для этого выполним последовательно: Файл -> Создать -> Проект… (также можно просто нажать сочетание клавиш Ctrl+Shift+N или пункт «Создать проект…» на Начальной странице).
Выберем слева в пункте Установленные шаблоны язык Visual C#, далее найдём в списке Консольное приложение. Также здесь можно выбрать какой использовать «фреймворк» (набора компонентов для написания программ). В нашем случае выберем .NET Framework 4.
В поле Имя вводим LWP11-Server -- это название программы (выбрано по названию лабораторного практикума, номеру и названию работы, через тире в названии обозначаем принадлежность будущего приложения). В поле Расположение указана конечная директория, где будет находиться весь проект. Выберем расположение удобное для быстрого поиска. В поле Имя решения вводится либо название программы «по умолчанию» из поля Имя автоматически, либо можно ввести своё собственное. Под этим именем будет создана конечная папка проекта (если Имя и Имя решения разные).
Рис. 4.1 Вводим данные нового проекта консольного приложения
После нажатия клавиши ОК мы увидим сформированный проект и исходный код консольного приложения (не пустого изначально).
Рис. 4.2 Обозреватель решений: состав проекта приложения Windows Forms сформированного средой разработки
Теперь, можно откомпилировать созданную программу, нажав клавишу F5 (Отладка -> Начать отладку или нажав на иконку . Тем самым мы запускаем приложение в режиме отладки (и производим компиляцию debug-версии программы) (Debug выбрано изначально). При первом запуске пустого консольного приложения, окно появится и сразу же исчезнет. Теперь необходимо добавить удалённый объект в качестве Ссылки. Выполним: Проект -> Добавить ссылку, либо ПКМ на Ссылки в обозревателе решений, далее Добавить ссылку....
В открывшемся окне перейдём на вкладку Обзор, укажем путь к библиотеке классов, которую мы уже скомпилировали:
Рис. 4.3 Добавить ссылку: выбор нужного объекта, а именно ранее скомпилированной библиотеки классов: LWP11-RemoteObject.dll
Жмём ОК. Удалённый объект добавлен в наше приложение и теперь можно работать с классами, предоставленными этим объектом:
Также, необходимо добавить в качестве ссылки ещё один объект (вкладка .NET): System.Runtime.Remoting:
Рис. 4.4 Добавить ссылку: добавление ссылки System.Runtime.Remoting
Модифицируем код консольного приложения. В самом начале добавим следующие строчки:
using LWP11_RemoteObject;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Ipc;
Непосредственно главную функцию, метод Main() изменим следующим образом:
static void Main(string[] args)
{
Console.Title = "Динамическая связь приложений (C#) :: Сервер";
Console.WriteLine("Динамическая связь приложений (C#) :: Сервер");
// Регистрируем канал № 4567
var ipcChannel = new IpcChannel("4567");
ChannelServices.RegisterChannel(ipcChannel, false);
// Получаем данные по каналам
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteSend1), "RemoteSend1.rem", WellKnownObjectMode.Singleton);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteSend2), "RemoteSend2.rem", WellKnownObjectMode.Singleton);
Console.WriteLine("\nНажмите Enter для выхода из приложения...\n\nДанные полученные по каналам:\n\t");
Console.ReadLine();
}
Осталось только добавить два новых класса, реализующих функции получения данных от клиента. Реализуем их в одном файле. Для этого добавим новый файл в наш проект (Проект -> Добавить новый элемент..., либо нажать сочетание клавиш Ctrl+Shift+A). В открывшемся окне выберем Класс, в качестве имени укажем RemoteSend.cs:
Рис. 4.5 Добавление нового элемента: Класс с именем RemoteSend.cs
Изменим весь код нового файла класса следующим образом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LWP11_RemoteObject;
namespace LWP11_Server
{
class RemoteSend1 : MarshalByRefObject, IRemoteSend1
{
public void Send(int x, int y)
{
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine("\tX = {0}, Y = {1}", x, y);
}
}
class RemoteSend2 : MarshalByRefObject, IRemoteSend2
{
public void Send(int x, string y)
{
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("\tTB_1.Text = {0}, TB_2.Text = {1}", x, y);
}
}
}
Компилируем приложение (Release) и запускаем.
Рис. 4.7 Окончательная работа приложения-сервера (LWP11-Server.exe)
5. Завершающая часть
Теперь запускаем только приложение-клиент и приложение-сервер. Щёлкаем на любом место формы клиента, а также вводим числом и букву в текстовые поля. Сервер будет «ловить» все щелчки по форме клиента (левой кнопкой мыши), а также изменения текста в «буквенном» текстовом поле (после изменения, значения двух текстовых полей будут переданы серверу). Результат действий видим в окне консоли сервера. Результат работы показан ниже (Рис. 5. 1):
Рис. 5.1 Динамическая связь приложений: результат работы приложения-клиента (сверху) и приложения-сервера (снизу)
6. О приложении к Лабораторной работе № 11
Получившиеся программы (LWP11-Server.exe и LWP11-Client.exe), собранные из кусков кода приведённых в данной лабораторной работе, а также DLL-файл для удалённого объекта (LWP11-RemoteObject.dll) можно загрузить по ссылке в конце этого материала.
Размещено на Allbest.ru
...Подобные документы
Разработка Windows-приложений с использованием библиотеки MFC. Базовый набор классов, написанных на языке С++ и предназначенных для упрощения процесса программирования под Windows. Фундаментальные идеи объектно-ориентированного программирования.
курсовая работа [348,1 K], добавлен 02.07.2011Теоретические основы разработки Windows-приложений с использованием библиотеки MFC. Создание приложения с помощью Visual C++. Описание логической структуры приложения. Установка и запуск программы. Входные и выходные данные. Преимущество MFC библиотек.
курсовая работа [563,2 K], добавлен 21.06.2011Принципы построения распределенных информационных приложений. Распределенное трех уровневое приложение. Необходимость использования приложений в средней школе. Системы управления контентом для создания сайта. Анализ сайтов учителей начальных классов.
дипломная работа [2,1 M], добавлен 26.05.2014Теоретические основы написания Windows-приложений с использованием библиотеки MFC. Основы программирования под Windows. Проектирование приложений в среде Microsoft Visual C++. Описание логической структуры приложения, его функциональное назначение.
курсовая работа [1,3 M], добавлен 12.12.2011Разработка приложений на платформе Win32 для исследования взаимодействия между процессами через отображение файла в память. Модель приложений "клиент - сервер". Описание алгоритма работы программы-клиента и программы-сервера. Результаты работы приложений.
курсовая работа [869,3 K], добавлен 18.05.2014Создание клиент-серверного приложения "Чат" с помощью среды визуальной разработки приложений Borland C++ Builder версии 6. Описание функциональности приложения: наличие клиент-серверной архитектуры, обмен короткими сообщениями, а также передача файлов.
курсовая работа [302,0 K], добавлен 30.01.2012Связь между клиентом и сервером, поддерживаемая посредством передачи сообщений. Конфигурация подчиненного и перенаправителей. Архитектура специальной распределенной вычислительной системы, в которой приложение делится на клиентский и серверный процессы.
контрольная работа [126,8 K], добавлен 08.02.2015Разработка программы, проверяющей уровень знаний по разделу стереометрии и позволяющей выбор один из нескольких вариантов и ввод ответа. Характеристика библиотеки MFC, тела, классов и файлов приложения, цикла сообщений и текстовых запусков программы.
курсовая работа [1,5 M], добавлен 28.06.2011Архитектура клиент-сервер на основе сокетов Windows. Описание утилиты Ipconfig. Конфигурирование стека TCP/IP. Реализация сокетов через классы NET. Структура библиотечных и пользовательских классов. Схема интерфейса пользователя и работы приложения.
курсовая работа [419,5 K], добавлен 13.12.2012Общая характеристика операционных систем и приложений Windows. Разделение ресурсов, работа с окнами, назначение диска, видов памяти, системы сохранения и передачи данных. История возникновения приложений, их виды и особенности, порядок написания.
курс лекций [321,0 K], добавлен 24.06.2009Многоуровневые архитектуры клиент–сервер. Диаграммы классов, реализующих уровни презентации, бизнес–логики и базы данных приложения. Словесное описание процесса выполнения транзакций. Создание, изменение и удаление хранимых процедур, их выполнение.
курсовая работа [3,4 M], добавлен 23.03.2013Характеристика модели клиент-сервер как технологии взаимодействия в информационной сети. Разработка и описание алгоритмов работы приложений на платформе Win32 в среде Microsoft Visual Studio, использующих для межпроцессного взаимодействия сокеты.
курсовая работа [544,6 K], добавлен 02.06.2014План проекта настройки сервера для удалённого запуска приложений MS Visio 2007 и MS Project 2007 через RemoteApp. Сбор информации об установленном программном и аппаратном обеспечении; аудит событий безопасности объектов всех серверов с помощью подписок.
дипломная работа [10,0 M], добавлен 11.09.2012Рассмотрение архитектуры "файл-сервер" и двух- и трехуровневых архитектур "клиент-сервер". Модель сервера приложений и свойства "идеальной" системы управления распределенными базами данных. Способы распределения функций обработки логики запроса.
презентация [60,2 K], добавлен 19.08.2013Правила создания и особенности работы с приложением Windows Application. Рассмотрение структуры панели Properties и ее функционального назначения. Возможности пункта меню "View". Практическая разработка приложения - калькулятора для сложения двух чисел.
лабораторная работа [99,1 K], добавлен 01.12.2011Обзор существующего программного обеспечения. Структура и отличительные особенности формата MP3. Сокеты TCP/IP, клиент-сервер. Язык программирования Visual Basic.net в среде разработки Visual Studio 2008. Разработка приложения "MP3_Catalogizator".
дипломная работа [2,1 M], добавлен 09.02.2015Устройство веб-приложений, преимущества их построения. Характеристика технологий веб-программирования, используемых на стороне сервера и на стороне клиента. Формирование и обработка запросов, создание интерактивного и независимого от браузера интерфейса.
контрольная работа [76,4 K], добавлен 08.07.2014Создание Windows-прилoжения, проверяющего знания ученика по теме "Знания пользователя по геометрии". Использование для написания программы в среде Мicrosoft Visuаl Studio 2008 c иcпoльзoванием библиoтеки МFC. Работа с элементами интерфейса программы.
курсовая работа [1,5 M], добавлен 02.07.2011Принципы работы с графикой средствами GDI+. Пространство имен и служебные типы System. Drawing. Возможности класса Graphics. Использование программного компонента "Таймер". Графическое Windows-приложение "Созвездие", его структура и элементы, функции.
курсовая работа [348,0 K], добавлен 03.03.2016Разработка API взаимодействия клиентских приложений с сервером СУБД через Pipe под Windows. Устройство и характеристики СУБД SQLite. Методы WinAPI для передачи данных. Реализация взаимодействия через PIPE. Результат работы серверного приложения.
курсовая работа [596,3 K], добавлен 09.05.2014