Лучшая практика для обнаружения клиентского разъединения в.NET?

, Что является официально поддерживаемым способом изменить эти debconf настройки, предпочтительно показывая пользователю полезный экран выбора, который использовал быть данным sudo dpkg-reconfigure grub-pc

, Это работает просто великолепно в Точном (12.04). Вот то, что я получил выполнение его:

enter image description here enter image description here enter image description here enter image description here five

8
задан cedrou 2 September 2009 в 12:10
поделиться

4 ответа

Единственный другой вариант, если это TCP, - это то, что TCP будет время от времени отправлять keep-alive, который все еще опрашивается, например, что вы делаете сейчас, но обрабатывается на уровне TCP поэтому протоколу не нужно знать об этом.

Однако нет способа обойтись без опроса, поскольку, не отправив что-либо другому клиенту и не получив ответа, вы не сможете узнать, подключено оно все еще или нет. В любом случае может потребоваться поддержка активности при обмене данными посредством проверки пакетов с отслеживанием состояния, такой как стандартный протокол NAPT, чтобы избежать прерывания сеанса удаленным сервером из-за отсутствия активности.

5
ответ дан 5 December 2019 в 20:18
поделиться

Вы можете использовать метод ниже, чтобы узнать, подключен ли еще клиент. Этот

public static bool IsConnected(this TcpClient client)
{
    try
    {
        bool connected = !(client.Client.Poll(1, SelectMode.SelectRead) && client.Client.Available == 0);

        return connected;
    }
    catch
    {
        return false;
    }
}

Этот ответ предназначен для тестирования сокета, из которого я получил свой фрагмент кода.

3
ответ дан 5 December 2019 в 20:18
поделиться

Есть ли у вас контроль над клиентом? Если да, то не можете ли вы просто попросить клиента отправить на сервер специальный пакет, в котором сообщается, что он отключается, а затем отсоединять сокет?

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

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

0
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: