Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Топ:
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
ЦЕЛЬ РАБОТЫ. Познакомиться с возможностями взаимодействия приложений на С# через локальную сеть на основе протокола 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"));
}
}
Клиент должен получить доступ к удаленному объекту сервера. Это делается с помощью команды:
|
|
|
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!