Сервер: создание консольного приложения
Снова запускаем Visual Studio 2010, откроется Начальная страница:
Для начала, надо создать проект, для этого выполним последовательно: Файл -> Создать -> Проект… (также можно просто нажать сочетание клавиш Ctrl + Shift + N или пункт «Создать проект…» на Начальной странице).
Выберем слева в пункте Установленные шаблоны язык Visual C #, далее найдём в списке Консольное приложение. Также здесь можно выбрать какой использовать «фреймворк» (набора компонентов для написания программ). В нашем случае выберем . NET Framework 4.
В поле Имя вводим LWP 11- Server — это название программы (выбрано по названию лабораторного практикума, номеру и названию работы, через тире в названии обозначаем принадлежность будущего приложения). В поле Расположение указана конечная директория, где будет находиться весь проект. Выберем расположение удобное для быстрого поиска. В поле Имя решения вводится либо название программы «по умолчанию» из поля Имя автоматически, либо можно ввести своё собственное. Под этим именем будет создана конечная папка проекта (если Имя и Имя решения разные).
Рис. 4. 1. Вводим данные нового проекта консольного приложения
После нажатия клавиши ОК мы увидим сформированный проект и исходный код консольного приложения (не пустого изначально).
Рис. 4. 2. Обозреватель решений: состав проекта приложения Windows Forms сформированного средой разработки
|
|
Теперь, можно откомпилировать созданную программу, нажав клавишу F 5 (Отладка -> Начать отладку или нажав на иконку . Тем самым мы запускаем приложение в режиме отладки (и производим компиляцию debug-версии программы) (Debug выбрано изначально). При первом запуске пустого консольного приложения, окно появится и сразу же исчезнет.
Теперь необходимо добавить удалённый объект в качестве Ссылки. Выполним: Проект -> Добавить ссылку, либо ПКМ на Ссылки в обозревателе решений, далее Добавить ссылку....
В открывшемся окне перейдём на вкладку Обзор, укажем путь к библиотеке классов, которую мы уже скомпилировали:
Рис. 4. 3. Добавить ссылку: выбор нужного объекта, а именно ранее скомпилированной библиотеки классов:LWP 11- 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. Окончательная работа приложения-сервера (LWP 11- Server . exe)
Завершающая часть
Теперь запускаем только приложение-клиент и приложение-сервер. Щёлкаем на любом место формы клиента, а также вводим числом и букву в текстовые поля. Сервер будет «ловить» все щелчки по форме клиента (левой кнопкой мыши), а также изменения текста в «буквенном» текстовом поле (после изменения, значения двух текстовых полей будут переданы серверу). Результат действий видим в окне консоли сервера. Результат работы показан ниже (Рис. 5. 1):
Рис. 5. 1. Динамическая связь приложений:результат работы приложения-клиента (сверху) и приложения-сервера (снизу)
Дата добавления: 2019-09-13; просмотров: 158; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!