2013-05-27 2 views
2

Я создал небольшое приложение, которое регистрирует данные с клиента на сервер. Я хочу получить статус клиентского приложения, когда он выйдет из приложения из мессенджера задачи. Как получить статус клиента.Программирование сокетов C# Window Application

Как и в скайпе.

Я выхожу из скайп-формы.

ответ

1

Вы можете отправить клиенту небольшие пульс через регулярные промежутки времени. Если эти пульса останавливаются, вы знаете, что клиент отключился (либо процесс был убит, приложение выключено, компьютер выключен, сетевое соединение отключено, и т. Д.).

+0

Спасибо, Андреас! Та же идея была в моем сознании. что другое приложение, пинговое соединение со всем клиентским IP-адресом и при любом запросе, остается тайм-аутом. Есть ли какой-либо быстрый способ, чтобы он не замедлял производительность приложения, а также сервера. –

+0

Трудная тема! Я могу только предупреждать о соединениях с базой данных во время сердечных сокращений. Удостоверьтесь, что вы не блокируете целые таблицы, избегаете попадания в тупики и т. Д. – Andreas

+0

Я сделал это сам через программирование сокетов. как в простом приложении чата. –

0

Невозможно поймать SocketException, а также проверить получение нулевых байтов. Если вы получаете нулевые байты, другая сторона закрыла соединение. Если вы получите SocketException с SocketErrorCode, установленным в ConnectionReset, вы также можете предположить, что другая сторона ушла. Единственное, что вы не получите, - это половина открытых подключений. Для этого вам понадобится какой-то живой пакет, как предложил Андреас.

+0

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

+0

@ Andreas. Не за что. Я получаю это много в методах socket.Receive(). Также в некоторых протоколах клиент или сервер могут инициировать сохранение сохраненного пакета. Если запросы будут реагировать асинхронно, сервер инициирует обмен данными. – uriDium

+0

Я сделал через Socket socketForClient = tcpListener.AcceptSocket(); для получения обработчиков diconccected, обработанных в исключении. В любом случае спасибо за ваши комментарии. –

Смежные вопросы