Хорошо, я знаю, что есть много информации об этом, и я обещаю вам, что я прочитал все это и попробовал множество различных методов, чтобы заставить это работать !!
У меня есть программа сервера сокетов, которая работает на ноутбуке. Затем у меня есть до 50 ноутбуков, подключенных по беспроводной сети через одну и ту же локальную сеть к серверу. Все клиентские ноутбуки подключаются к серверу (используя Socket.ConnectAsync), а сервер также использует асинхронные методы для отправки и получения данных. Сервер показывает пользователю список подключенных клиентских ноутбуков, и этот список кажется точным и подбирается всякий раз, когда клиент отключается и подключается. Однако клиентские ноутбуки, кажется, никогда не обнаруживают, когда соединение с сервером было потеряно при определенных обстоятельствах (то есть, если происходит сбой программы сервера, если серверный ноутбук переходит в режим ожидания и т. Д.) У меня на клиентских ноутбуках есть таймер, который опрашивает подключение каждые 5 секунд следующим образом:
bool SocketConnected(Socket s)
{
bool part1 = s.Poll(0, SelectMode.SelectWrite);
bool part2 = (s.Available == 0);
if (!part1 && part2)
{
return false;
}
else
{
return true;
}
}
Я пытался использовать все режимы выбора (SelectWrite, SelectRead, SelectError) и пытался использовать разные значения времени ожидания. Я попытался проверить значение s.Connected после этих операций и перепробовал все способы других методов, чтобы определить состояние подключения, и ничто не дает надежных результатов !! Я думаю, что могу достичь желаемого результата, отправляя фиктивную информацию каждые 5 секунд и проверяя s.Connected после этого, однако я не очень хочу этого делать, так как каждый ноутбук уже отправляет большое количество данных на сервер как есть. , Любая помощь очень ценится! Спасибо