Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.94.150.98] |
|
Сообщ.
#1
,
|
|
|
есть класс на основе Socket. У него есть методы чтения-записи данных.
как правило они возвращают true/false, но иногда и объекты. Тоесть может возвращаться null при неудачном действии. Так вот приложению, использующему данный класс нужно по результатам понять - произошло ли все успешно, а при обрыве зделать кокие-то действия (например затенить кнопки). Так вот в чем вопрос - что (а вернее какое исключение) считать обрывам, а на что возврвщать результат. Например: производится запись в сокет. Если это не удалось по причине неправильных данных или сервер ответил, что неудачно, то вернуть статус. А если произошел обрыв - то бросить исключение. З.Ы, Или неправильную передачу тоже считать обрывам ? |
Сообщ.
#2
,
|
|
|
При работе с сокетами обычно используют классы NetworkStream и BinaryReader:
try { ... NetworkStream netStream = new NetworkStream(clientSocket); BinaryReader binReader = new BinaryReader(netStream); ... binReader. // вызываются методы чтения или записи ... binReader.Close(); } catch( EndOfStreamException ...) {...} catch( IOException...) {...} catch( SocketException...) {...} У SocketException есть хорошее свойство NativeErrorCode. По его значению можно определить, какая ошибка произашла. |
Сообщ.
#3
,
|
|
|
_oz_, я и использую NetworkStream
просто не совсем понятно как реагировать на исключения какое считать обрывом, а какое неправильной передачей. Или например IOException достаточно для любого случая ? И как поможет NativeErrorCode ? |
Сообщ.
#4
,
|
|
|
Несколько значений NativeErrorCode : 10022, 10004, 10060 - последнее, если не получилось законнектиться, остальные не помню - получил при тестах:)
Чтобы исключить неправильную передачу отправляй ответ на запрос. Вызовется IOException, если ты читаешь или пишешь данные, когда сокет закрыт. |
Сообщ.
#5
,
|
|
|
Цитата _oz_ @ Вызовется IOException, если ты читаешь или пишешь данные, когда сокет закрыт тоесть IOException достаточно для отслеживания обрыва ? просто меня немного смутило создание самого Socket. В MSDN написано, что в случае неудачи он бросить SocketException. Но Поймать его я смог только на IOException, а не на SocketException |