Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный_практикум.doc
Скачиваний:
74
Добавлен:
15.11.2019
Размер:
45.35 Mб
Скачать

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)