Методические указания по выполнению ипр №1 — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Методические указания по выполнению ипр №1

2017-06-02 210
Методические указания по выполнению ипр №1 0.00 из 5.00 0 оценок
Заказать работу

 

ЦЕЛЬ РАБОТЫ. Познакомиться с возможностями взаимодействия приложений на С# через локальную сеть на основе протокола TCP.

 

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

 

Теперь приведем текст программы-сервера:

 

using System;

using System.IO;

using Sysem.Net.Sockets;

 

 

namespace Server

{

 

public class ServerExample

{

 

private void Listen() //это – единственный метод сервера, который мы //используем

{

 

TcpListener tcpl = new TcpListener(50001); //создаем прослушиватель порта 50001

tcpl.Start(); //запускаем прослушиватель

//ОЖИДАНИЕ ПОДКЛЮЧЕНИЯ КЛИЕНТА

Socket newSocket = tcpl.AcceptSocket(); //прослушиватель ожидает подключения //клиента

if (newSocket.Connected) //Если соединение установлено, то пересылаем //данные клиенту

 

{

NetworkStream ns= new NetworkStream(newSocket);

//пересылка данных

byte [] buf={(byte) ' S', (byte) 'O', (byte) ' ', (byte) 'M', (byte) 'U', (byte) 'S', (byte) ' ', (byte) 'T', (byte) ' ', (byte) 'B', (byte) 'E', (byte) ' ', (byte) 'I', (byte) ' ', (byte) 'S', (byte) 'A', (byte) 'Y',};

ns.Write(buf,0,3); //отправляем данные клиенту

//Очистка

 

ns.Flush();

ns.Close();

break;

}

 

}

static void Main()

{

//

// TODO: Add code to start application here

 

ServerExample se=new ServerExample();

se.Listen();

 

}

}

 

}

}

 

Итак, чтобы сервер возвратил строку “SO MUST BE I SAY”, необходимо подключение к нему клиента через порт 50001. Номер порта можно использовать и другой. Мы видим, что механизм сервера весьма прост и во многом напоминает тот, который использует классический JAVA.

 

Нужно теперь скомпилировать текст сервера таким образом:

Пуск->Программы-> Visual Studio Net-2003-> Command Prompt

и ввести

 

Csc server.cs

 

Теперь нужно создать новый проект - приложение клиента. Клиент должен знать сетевой адрес сервера и номер порта. Вот его текст:

 

using System;

using System.IO;

using Sysem.Net.Sockets;

 

 

class clientexample

{ public static void Main()

{

TcpClient newSocket=

new TcpClient("localhost",50001); //Создаем объект типа TcpClient для связи с сервером

NetworkStream ns= newSocket.GetStream(); //ns –потоковая переменная на базе сокета

//чтение массива байтов от сервера из входного потока:

 

byte [] buf= new byte [20];

ns.Read(buf,0,10);

char [] buf2= new char[20];// теперь выполним преобразование байтов в тип char:

for(int i=0; i<20;i++)

{

buf2[i]= (char) buf[i];

}

Console.WriteLine(buf2); // выводим строку от сервера на консоль клиента;

 

ns.Clear();

newSocket.Close();

 

 

}

}

 

Cкомпилируйте клиента:

 

Csc clientexample.cs

 

 

Вот собственно и все.

 

В результате компиляции клиента и сервера строятся файлы с расширением exe.

 

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

 

Затем отдельно запустите клиента.

 

 

Убедитесь в правильности работы программы.

 

 

Имеется возможность связи клиента и сервера через протокол HTTP (этот протокол использует Internet Explorer). Рассмотрим, как осуществить такую связь. Отметим, что теперь нет необходимости указывать номер порта. Сервер реализуется как удаленный объект, так что нам потребуется посредник между этим объектом и клиентом – так называемый интерфейс. В интерфейсе нужно объявить методы сервера, которые мы хотим сделать доступными из клиента. Вот пример очень простого интерфейса:

 

using System;

public interface ISimpleObject

{

String ToUpper(String inString);

}

 

Мы видим, что единственным методом сервера будет метод ToUpper, который получает в качестве входного аргумента строку inString. Реализацию данного метода следует перенести в сервер. Вот, собственно, и сам сервер:

 

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

 

namespace Server

{

 

public class SimpleObject: MarshalByRefObject, ISimpleObject

{

 

public String ToUpper(String inString)

{

return(inString.ToUpper());

}

 

 

class Example8_8

{

 

static void Main(string[] args)

{

//

// TODO: Add code to start application here

 

 

HttpChannel channel = new HttpChannel(54321);

ChannelServices.RegisterChannel(channel);

 

RemotingConfiguration.RegisterWellKnownServiceType(typeof(SimpleObject),

"SOEndPoint", WellKnownObjectMode.Singleton);

 

Console.WriteLine("Press To Stop Server");

Console.ReadLine();

 

}

 

}

}

 

Этот сервер не очень обычен. Обратим внимание на то, что в объявление класса сервера подключены уже созданный нами интерфейс и еще один интерфейс: MarshalByRefObject. Дальше следует реализация метода ToUpper. Метод Main() сервера занимается, так сказать, связью с клиентом:

 

HttpChannel channel = new HttpChannel(54321); // создаем канал связи снова через порт //!

ChannelServices.RegisterChannel(channel); // регистрируем канал в операционной //системе

 

RemotingConfiguration.RegisterWellKnownServiceType(typeof(SimpleObject),

"SOEndPoint", WellKnownObjectMode.Singleton); //определяем тип соединения-“Simple //Object End Point и режим его работы- Singleton (обслуживание одного клиента одним //удаленным объектом)

 

Наконец, рассмотрим сторону клиента:

 

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

 

class client

{ public static void Main()

{

HttpChannel h1=new HttpChannel(0);

ChannelServices.RegisterChannel(h1);

Object remoteOb=

RemotingServices.Connect(typeof(ISimpleObject),

"http://localhost:54321/SOEndPoint");

ISimpleObject so=remoteOb as ISimpleObject;

Console.WriteLine(so.ToUpper("so must be I say"));

 

}

}

 

Клиент должен получить доступ к удаленному объекту сервера. Это делается с помощью команды:


Поделиться с друзьями:

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

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

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.016 с.