KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Симон Робинсон - C# для профессионалов. Том II

Симон Робинсон - C# для профессионалов. Том II

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Симон Робинсон, "C# для профессионалов. Том II" бесплатно, без регистрации.
Перейти на страницу:

Класс Dns отличается от классов IPAddress и IPHostEntry тем, что инкапсулирует возможность реально общаться с серверами для получения информации. Классы IPAddress и IPHostEntry, напротив, мало чем отличаются от структур данных, которые имеют подходящие свойства, позволяющие получить доступ к содержащимся в них данным.

Пример: DnsLookup

Связанные с DNS и IP классы будут проиллюстрированы с помощью примера, который ищет имена DNS. Этот снимок экрана показывает DnsLookup в действии.

Пример просто предлагает пользователю ввести имя DNS в основное текстовое поле. Когда пользователь нажимает кнопку Resolve, пример использует метод Dns.Resolve() для извлечения ссылки IPHostEntry и выводит имя хоста и адреса IP. Отметим, что выведенное имя хоста может в некоторых случаях отличаться от введенного имени. Это происходит, если одно имя DNS (www.microsoft.com) действует просто как прокси для другого имени DNS (www.microsoft.akadns.net).

Приложение DnsLookup является стандартным оконным приложением C# с элементами управления, как показано на снимке экрана, и присвоенными им соответственно именами textBoxInput, buttonResolve, textBoxHostName и listboxIPs. Затем в класс Form1 добавляется следующий метод заданием его в окне свойств Visual Studio.NET в качестве обработчика событий для нажатия кнопки buttonResolve.

void OnResolve(object sender, EventArgs e) {

 try {

  IPHostEntry iphost = Dns.Resolve(textBoxInput.Text);

  foreach(IPAddress ip in iphost.AddressList) {

   int ipaddress = ip.Address;

   listBoxIPs.Items.Add(ipaddress);

   listBoxIPs.Items.Add(" " + Dns.IpToString(ipaddress));

  }

  textBoxHostName.Text = iphost.HostName;

 } catch(Exception ex) {

  MessageBox.Show("Unable to process the request because " +

   "the following problem occurred:n" + ex.Message,

   "Exception occurred");

 }

}

Отметим, что в этом коде перехватываются все исключения — исключение может легко возникать, если пользователь вводит что-то, что не является именем DNS, или если сеть выключена.

После извлечения экземпляра IPHostEntry используется свойство AddressList для получения массива, содержащего адреса IP, которые затем перечисляются в цикле foreach. Каждый адрес выводится как целое число и как строка использованием статического метода Dns.IpToString(), который делает то же самое, что и экземпляр метода IPAddress.ToString().

Протоколы нижнего уровня

В этом разделе кратко упоминаются некоторые из классов .NET, используемые для коммуникации на нижнем уровне.

Коммуникация между компьютерами работает на нескольких различных уровнях. Рассмотренные до сих пор в этой главе классы действуют на самом высоком уровне, на котором определены особые команды. Наверное, проще всего понять это, рассматривая FTP, так как многие разработчики знакомы с командами FTP. Хотя в последние годы появился ряд хороших утилит FTP на основе UI, но до недавних пор основным инструментом, используемым для FTP в среде Windows, была команда DOS ftp, которая работала в командной строке, и поэтому использование ее включало явный ввод посылаемых серверу инструкций ftp.

HTTP, Telnet, SMTP, POP и другие протоколы основываются на похожих наборах команд. Единственное различие состоит в том, что для большинства из этих протоколов используются инструменты, которые скрывают передачу команд от пользователя, так что он обычно об этом не знает. Например, когда в браузере Web вводится URL и посылается запрос Web, браузер на самом деле посылает на сервер команду GET (обычным текстом), соответствующую по своему назначению команде FTP get. Он может также послать команду POST, которая указывает, что к запросу присоединены другие данные.

Однако эти протоколы сами по себе не являются достаточными для обеспечения коммуникации между компьютерами. Даже если клиент и сервер понимают, например, протокол HTTP, они все равно не смогут понять друг друга, если не будет точно согласовано, как передавать символы. Какой двоичный формат будет использоваться, и, даже спускаясь на самый нижний уровень, какое напряжение будет использоваться для представления 0 и 1 в двоичных данных? Это связано с тем, что существует множество различных согласуемых протоколом элементов, которые разработчики и инженеры, работающие в этой области, часто называют стеком протоколов. Стек протоколов является, по сути, списком различных протоколов от самого верхнего уровня (HTTP, FTP и т. д.) до базовых протоколов напряжения нижнего уровня и т.д.

К счастью, для большей части разработок нет необходимости спускаться так далеко вниз по стеку. Но если требуется эффективная коммуникация, нет ничего необычного в написании кода, который работает непосредственно на уровне пересылки между компьютерами пакетов двоичных данных. Это область таких протоколов, как TCP, и Microsoft предоставляет ряд классов, которые позволяют удобно работать с двоичными данными на этом уровне. Используя эти классы, можно, например, послать широковещательное сообщение, которое будет одновременно получено рядом компьютеров в сети.

Классы нижнего уровня

Соответствующие классы определены в пространстве имен System.Net.Sockets и позволяют, например, посылать непосредственно запросы TCP или ожидать запросы TCP на определенном порте. Основными классами нижнего уровня являются:

Класс Назначение Socket Низкоуровневый класс, который имеет дело с реальным управлением соединениями. Этот класс используется внутренне такими классами, как WebRequest и TcpClient. NetworkStream Производный класс из Stream. Представляет поток данных из сети. TcpClient Позволяет создать соединения для приемников. TcpListener Позволяет ожидать входящие запросы соединения. UdpClient Позволяет создать соединения для клиентов UDP. (UDP является альтернативным протоколом для TCP, но используется значительно менее широко, в основном в локальных сетях.)

Заключение

В этой главе очень кратко были рассмотрены некоторые из базовых классов .NET, которые имеют дело с открытием клиентских соединений в сети и Интернете, а также отправкой запросов и получением ответов от серверов. Наиболее очевидным результатом этого будет получение страниц HTML.

Классы .NET во время написания этой книги по общему признанию слабо охватывали своей поддержкой многие распространенные протоколы, и примечательно, что даже для выполнения такой базовой задачи, как вывод страницы HTML пришлось обращаться к унаследованному элементу управления ActiveX WebBrowser. (Необходимо сказать, что это не является таким уж большим недостатком, поскольку возможность взаимодействия .NET COM и Visual Studio.NET делают использование подобных элементов управления почти таким же простым, как использование собственных элементов управления Windows Forms). Тем не менее доступные классы .NET делают выполнение некоторых важных задач простыми по своей сути, это особенно справедливо для процесса помещения страницы Web в поток или файл.

Главa 23

Создание распределенных приложений с помощью .NET Remoting

В главе 17 были рассмотрены службы Web, которые позволяют вызывать объекты на удаленном сервере. Использование сервера Web и протокола SOAP не всегда достаточно эффективно для приложений интранет. Протокол SOAP означает большие накладные расходы при пересылке большого объема данных. Для быстрых решений интранет можно использовать просто сокеты, как это делалось в предыдущей главе. В "старом мире", как известно, программы писали с использованием DCOM. С помощью DCOM можно вызывать методы на объектах, выполняющихся на сервере. Программная модель всегда является одной и той же, если объекты применяются на сервере или на клиенте.

Без DCOM мы вынуждены иметь дело с портами и сокетами, уделяя внимание целевым платформам в связи с возможным различным представлением данных, и создавать специальные протоколы, в которых сообщения посылаются сокету, чтобы, в конце концов, вызвать некоторые методы. DCOM обрабатывает все эти вопросы для программиста.

Заменой DCOM является .NET Remoting. В противоположность DCOM .NET Remoting может использоваться также в решениях Интернета, а для них DCOM недостаточно гибок и эффективен. С помощью .NET Remoting можно адаптировать и расширить любую часть архитектуры, поэтому подходит практически для любого удаленного сценария. В этой главе будут рассмотрены:

□ Архитектура .NET Remoting

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*