На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Исключения Socket
    есть класс на основе Socket. У него есть методы чтения-записи данных.
    как правило они возвращают true/false, но иногда и объекты. Тоесть может возвращаться null при неудачном действии.

    Так вот приложению, использующему данный класс нужно по результатам понять - произошло ли все успешно, а при обрыве зделать
    кокие-то действия (например затенить кнопки).

    Так вот в чем вопрос - что (а вернее какое исключение) считать обрывам, а на что возврвщать результат.
    Например: производится запись в сокет. Если это не удалось по причине неправильных данных или сервер ответил, что неудачно, то вернуть
    статус. А если произошел обрыв - то бросить исключение.

    З.Ы, Или неправильную передачу тоже считать обрывам ?
      При работе с сокетами обычно используют классы NetworkStream и BinaryReader:

      ExpandedWrap disabled
        try {
          ...
          NetworkStream netStream = new NetworkStream(clientSocket);
          BinaryReader binReader = new BinaryReader(netStream);
          ...
          binReader. // вызываются методы чтения или записи
          ...
          binReader.Close();
        }
        catch( EndOfStreamException ...) {...}
        catch( IOException...) {...}
        catch( SocketException...) {...}


      У SocketException есть хорошее свойство NativeErrorCode. По его значению можно определить, какая ошибка произашла.
        _oz_, я и использую NetworkStream

        просто не совсем понятно как реагировать на исключения
        какое считать обрывом, а какое неправильной передачей.
        Или например IOException достаточно для любого случая ?

        И как поможет NativeErrorCode ?
          Несколько значений NativeErrorCode : 10022, 10004, 10060 - последнее, если не получилось законнектиться, остальные не помню - получил при тестах:)
          Чтобы исключить неправильную передачу отправляй ответ на запрос. Вызовется IOException, если ты читаешь или пишешь данные, когда сокет закрыт.
            Цитата _oz_ @
            Вызовется IOException, если ты читаешь или пишешь данные, когда сокет закрыт

            тоесть IOException достаточно для отслеживания обрыва ?

            просто меня немного смутило создание самого Socket. В MSDN написано, что в случае неудачи он бросить SocketException.
            Но Поймать его я смог только на IOException, а не на SocketException
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0180 ]   [ 16 queries used ]   [ Generated: 28.03.24, 23:35 GMT ]