Как обнаружить разъединение сокета? - PullRequest
2 голосов
/ 19 мая 2010

Я реализовал задачу, используя шаблон асинхронных сокетов в Silverlight 3. Я начал с реализации Михаэля Шварца и основывался на ней. Таким образом, мое приложение Silverlight устанавливает постоянное сокетное соединение с устройством, а затем данные по мере необходимости передаются между устройством и приложением Silverlight.

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

  1. Keep-Alive. Я знаю, что это можно сделать на уровне сокетов, но я не уверен, как это сделать в асинхронной модели. Как бы класс Socket дал мне знать, что произошло отключение.

  2. Ручная поддержка. Обычно приложение Silverlight отправляет фиктивный пакет каждые 20 секунд или около того. Если это не удастся, я бы предположил отключение. Однако невероятно, что SocketAsyncEventArgs.SocketError всегда сообщает об успехе, даже если я просто отключаю устройство, к которому подключено приложение Silverlight. Я не уверен, что это ошибка или что мне нужно обновить до SL4.

Буду признателен за любые идеи, указания или реализацию.

1 Ответ

0 голосов
/ 04 июля 2010

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

...