2017-02-09 8 views
0

Я использую StreamSocket в универсальном приложении Windows, чтобы сделать TCP/IP-соединение с текстовой игрой (сокет остается открытым в течение длительного периода времени). У меня есть возможность подключения и возврата данных. Большинство реализаций сокетов, которые я использовал в прошлом, имеют свойство или функцию (или способ опроса сокета) и получают статус (будь то открытый, закрытый, прерываемый, ожидающий и т. Д.).Получить статус подключения StreamSocket (UWP)

Я не смог найти способ сделать это с помощью StreamSocket.

Мой вопрос: как я могу запросить статус соединения StreamSocket, чтобы увидеть, если он упал (не дожидаясь, когда я отправлю что-нибудь по трубе, чтобы он мог выйти из строя)?

Например, что-то, так что я мог бы сделать что-то вроде:

if (this.Socket.Status != Status.Connected) ...

ответ

1

if (this.Socket.Status != Status.Connected)

Код, который вы написали было весьма элегантно, однако, насколько я знаю нет такого api, предоставленного uwp.

Пространство имен Windows.Networking.Sockets имеет удобные вспомогательные методы и перечисления для обработки ошибок при использовании сокетов и WebSockets. Это может быть полезно для обработки определенных сетевых исключений по-разному в вашем приложении.

ошибка встречается на DatagramSocket, StreamSocket или StreamSocketListener операция возвращается как HRESULT значение. Метод SocketError.GetStatus используется для преобразования сетевой ошибки из операции сокета в значение перечисления SocketErrorStatus. Большинство значений перечисления SocketErrorStatus соответствуют ошибке, возвращаемой операцией сокетов Windows. Приложение может фильтровать определенные значения перечислений SocketErrorStatus для изменения поведения приложения в зависимости от причины исключения.

Для ошибок проверки параметров приложение также может использовать HRESULT из исключения, чтобы узнать более подробную информацию об ошибке, вызвавшей исключение. Возможные значения HRESULT указаны в заголовочном файле Winerror.h. Для большинства ошибок проверки параметров возвращается HRESULT: E_INVALIDARG .

+0

Я принял ответ, который, если бы я понял, что вы имели в виду, звучит так, как будто невозможно запросить состояние сокета без первого столкновения с исключением (кажется, что они не выбрасываются, пока я не попытаюсь отправить данные после того, был сломан). –