Читаем C# 4.0: полное руководство полностью

Для соединения по протоколу HTTP метод GetResponseStream() из класса WebResponse может сгенерировать исключение ProtocolViolationException, которое в целом означает, что в работе по указанному протоколу произошла ошибка. Что же касается метода GetResponseStream(), то это означает, что ни один из действительных ответных потоков недоступен. Исключение ObjectDisposedException генерируется в том случае, если ответ уже утилизирован. А исключение IOException, конечно, генерируется при ошибке чтения из потока, в зависимости от того, как организован ввод данных.


Обработка исключений

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


// Пример обработки сетевых исключений.

using System;

using System.Net;

using System.IO;

class NetExcDemo {

  static void Main() {

    int ch;

    try {

      // Сначала создать объект запроса типа WebRequest по указанному URI.

      HttpWebRequest req = (HttpWebRequest)

              WebRequest.Create("http://www.McGraw-Hill.com");

      // Затем отправить сформированный запрос и получить на него ответ.

      HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

      // Получить из ответа поток ввода.

      Stream istrm = resp.GetResponseStream();

      /* А теперь прочитать и отобразить гипертекстовое содержимое, полученное по указанному URI. Это содержимое выводился на экран отдельными порциями по 400 символов. После каждой такой порции следует нажать клавишу , чтобы вывести на экран следующую порцию, состоящую из 400 символов. */

      for (int i = 1; ; i++) {

        ch = istrm.ReadByte(); if (ch == -1) break;

        Console.Write((char)ch); if ((i % 400) == 0) {

          Console.Write("\nНажмите клавишу .");

          Console.ReadLine();

        }

      }

      // Закрыть ответный поток. При этом закрывается // также поток ввода istrm.

      resp.Close();

    }

    catch (WebException exc) {

      Console.WriteLine("Сетевая ошибка: " + exc.Message +

             "Код состояния: " + exc.Status);

    }

    catch (ProtocolViolationException exc) {

      Console.WriteLine("Протокольная ошибка: " + exc.Message);

    }

    catch (UriFormatException exc) {

      Console.WriteLine("Ошибка формата URI: " + exc.Message);

    }

    catch (NotSupportedException exc) {

      Console.WriteLine("Неизвестный протокол: " + exc.Message);

    }

    catch (IOException exc) {

      Console.WriteLine("Ошибка ввода-вывода: " + exc.Message);

    }

    catch (System.Security.SecurityException exc) {

      Console.WriteLine("Исключение в связи с нарушением безопасности: " + exc.Message);

    }

    catch (InvalidOperationException exc) {

      Console.WriteLine("Недопустимая операция: " + exc.Message);

    }

  }

}


Теперь перехватываются все исключения, которые могут быть сгенерированы сетевыми методами. Так, если изменить вызов метода Create() следующим образом:


WebRequest.Create("http://www.McGraw-Hill.com/moonrocket");


а затем перекомпилировать и еще раз выполнить программу, то в результате может быть выдано приведенное ниже сообщение об ошибке.


Сетевая ошибка: Удаленный сервер возвратил ошибку: (404) Не найден.

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных