Лабораторная работа № 12 Создание клиентской части многопользовательского чата 1. ЦЕЛЬ РАБОТЫ

advertisement
-1–
Лабораторная работа № 12
Создание клиентской части многопользовательского чата
1. ЦЕЛЬ РАБОТЫ
Целью работы является приобретение навыков в написании кода для клиентской
части приложения на языке программирования С#.
2. СОСТАВ РАБОЧЕГО МЕСТА
2.1. Оборудование: IBM-совместимый персональный компьютер (ПК).
2.2. Программное обеспечение: операционная система Windows, интегрированная
оболочка Visual Studio 2005 с установленным компонентом Visual C#.
3. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Создание клиента
Клиент тоже должен зарегистрировать канал, но поскольку по этому каналу не
будет передаваться информация, можно воспользоваться каналом 0:
HTTPChannel chan = new HTTPChannel(0);
ChannelServices.RegisterChannel(chan);
Теперь клиенту надо лишь соединиться с удаленным сервером, передав объект
Туре, представляющий тип требуемого объекта (в данном случае интерфейс ICalc) и URIидентификатор (URI расшифровывается как Uniform Resource Identifier, универсальный
идентификатор ресурса):
MarshalByRefObject obj = RemotingServices.Connect
(typeof(Programming_CSharp.ICalc), "http://locanost:65100/theEndPoint");
В этом примере предполагается, что сервер работает на локальном компьютере,
поэтому URI состоит из адреса http:/'/localhost, за которым следует номер порта сервера
65100, а за ним- конечная точка, объявленная на сервере, theEndPoint.
Удаленная служба должна возвратить объект, представляющий запрошенный
интерфейс. После явного преобразования типа этого объекта он будет готов к
употреблению. Поскольку установка удаленного соединения с объектом не имеет
стопроцентной гарантии (в сети возможны неполадки, хост-компьютер может оказаться
недоступным и т. д.), обращаться к объекту следует из блока try:
try
{
Programming_CSharp.ICalc calc = obj as Programming_CSharp.ICalc ;
Double sum = calc.Add(3,4);
}
В результате этих действий создан заместитель Calculator , работающий на сервере,
но доступный клиенту за границами процесса и, если потребуется, за границами
компьютера.
-2–
Рассмотрим как пошагово создать подключение к удаленному
серверу
1.
Создайте новое приложение Visual C# .NET типа "Console Application".
Класс "Class1" будет создан по умолчанию.
2.
Переименуйте файл Class1.cs в ClientApp.cs.
3.
Добавьте ссылку на пространство имен "System.Runtime.Remoting" в проект.
4.
Добавьте ссылку на библиотеку ServerClass.dll
Существует три разных способа, с помощью которых клиент может создавать
ссылки на удаленные объекты, и Вы можете использовать каждый из них во время
компиляции проекта.
a.
Скомпилируйте объект-сервер и укажите ссылку для компилятора на .exe
или .dll-файл при компиляции клиентского приложения. Этот метод полезен, когда оба
компонента - и клиент, и сервер - созданы на том же самом компьютере.
b.
Получите объект сервера из класса интерфейса и скомпилируйте клиента с
данным интерфейсом. Этот метод полезен, когда компоненты клиента и сервера не
расположены на том же самом компьютере. Интерфейс может быть скомпилирован в виде
динамически компонуемой библиотеки (DLL) и отправлен клиентским компьютерам по
мере необходимости. По возможности избегайте изменения спецификации
опубликованного интерфейса.
c.
Используйте утилиту SoapSUDS для извлечения требуемых метаданных из
выполняющегося объекта сервера. Этот метод полезен, когда компоненты клиента и
сервера разработаны на различных сайтах, и не доступны классы интерфейса. Укажите
Uniform Resource Identifier (URI) в утилите SoapSUDS и сгенерируйте требуемые
метаданные как источник или DLL. Обратите внимание, что инструмент SoapSUDS
только извлекает метаданные, а не генерирует источник для удаленного объекта.
5.
Используйте директиву "using" для пространств имен "Remoting",
"Remoting.Channels" и "Remoting.Channels.TCP" и для класса имен "ServerClass", чтобы
Вам не потребовалось полные имена позднее в коде Вашей программы. Вы должны
использовать директиву "using" перед всеми остальными объявлениями переменных.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using ServerClass;
6.
Объявите переменную для инициализации объекта "TcpChannel", который
будет использовать клиент для подключения к серверному приложению. Используйте
метод "RegisterChannel" для регистрации канала с помощью служб канала. Добавьте
следующий код в процедуру "Main" класса "Class1":
TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan);
7. Объявите и инициализируйте удаленный сервер. В данном примере используйте
метод "GetObject" объекта "Activator" для инициализации объекта "myRemoteClass" и
укажите следующие параметры:
•
Полное имя объекта, который был зарегистрирован (в данном примере, это
объект "ServerClass.myRemoteClass"), за котором следует имя "ServerClass". Укажите
здесь оба названия пространства имен и имени класса. Поскольку Вы не указали
пространство имен в предыдущем разделе, будет использоваться корневое пространство
имен, принятое по умолчанию.
-3–
•
Активизируйте URI данного объекта. URI должен включать протокол (TCP),
имя компютера (localhost), номер порта (8085) и конечную точку серверного объекта
(RemoteTest). Для доступа к удаленному серверу используйте следующий URI:
''tcp://localhost:8085/RemoteTest''.
myRemoteClass obj = (myRemoteClass) Activator.GetObject(typeof(myRemoteClass),
"tcp://localhost:8085/RemoteTest");
if (obj == null)
System.Console.WriteLine("Не удается найти сервер.");
else
if (obj.SetString("Отсылка строки на сервер."))
System.Console.WriteLine("Успех: Проверьте другую консоль.");
else
System.Console.WriteLine("Отсылка тестовой строки завершена неудачно.");
8.
Используйте метод "ReadLine" объекта "Console" для сохранения
клиентского приложения запущенным.
System.Console.WriteLine("Нажмите "Enter" для выхода...");
System.Console.ReadLine();
9.
Постройте свой проект.
10.
Убедитесь, что серверное приложение уже запущено.
11.
Запустите проект и выполните проверку связи между клиентом и сервером
4. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Порядок выполнения работы:
1. Составить программу для подключения к удалённому серверу, на котором
расположен многопользовательский чат по одному из вариантов, приведенных в
следующей таблице. Результаты вывести на экран дисплея.
№ варианта Описание действия программы
1
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
сверху, строка для ввода – максимум 30 символов: расположена под окном
сообщений. Кнопка под строкой.
2
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
снизу, строка для ввода должна состоять из 3-х и ограничиваться полем
TextBox’a. Расположена под окном сообщений. Кнопка справа.
3
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
сверху, строка для ввода – максимум 20 символов: расположена вверху
чата. Кнопка справа.
4
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
снизу, строка для ввода должна отображать только заглавные буквы.
Расположение произвольное.
5
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
сверху, строка для ввода – максимум 40 символов, находится сбоку окна
чата. Кнопка под строкой.
6
Чат должен иметь окно для сообщений пользователей, строку для ввода
-4–
7
8
9
10
сообщений, кнопку для отправки. Сообщения в окне должны появляться
снизу, строка для ввода должна быть в TextBox’e 10х4. Кнопка – под
строкой.
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
сверху, строка для ввода – слева от окна чата: максимум 20 символов.
Кнопка под строкой.
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
снизу, строка для ввода слева, должна отображать только заглавные буквы.
Кнопка над строкой.
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
сверху, строка для ввода в виде TextBox’a 5х5 под окном чата со скролом.
Кнопка справа.
Чат должен иметь окно для сообщений пользователей, строку для ввода
сообщений, кнопку для отправки. Сообщения в окне должны появляться
снизу, строка для ввода справа от окна чата: максимум 40 символов.
Кнопка между окном чата и строкой.
2. Ввести программу с клавиатуры с использованием Visual Studio 2005.
3. Отладить программу и запустить на выполнение.
5. СОДЕРЖАНИЕ ОТЧЕТА
В отчете должны быть представлен текст программы, значения вводимых величин
и полученные значения выводимых величин.
6. ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ
1. Для чего необходимо регистрировать канал клиенту?
2. Какие существуют способы , с помощью которых клиент может создавать
ссылки на удаленные объекты?
3. Для чего нужно использовать утилиту SoapSUDS?
4. Для чего используется метод "ReadLine" ?
5. Поясните использование метода "RegisterChannel".
Download