способ уведомления о разъединении сокета
только что искал подходящее решение, чтобы выяснить, когда клиент отключается. я нашел это:
public bool IsConnected( Socket s)
{
try
{
return !(s.Poll(1, SelectMode.SelectRead) &&s.Available == 0);
}
catch (SocketException) { return false; }
}
Я использую цикл while в моей основной программе с помощью thread.sleep (500) и запускаю метод Isconnectedm. Он работает нормально, когда я запускаю его в Visual Studio, и когда я нажимаю «Стоп отладка», он на самом деле уведомляет меня в программе на стороне сервера, но когда я просто иду. в exe в каталоге bin и запустите его - это действительно уведомляет меня о подключении, но когда я закрываю программу (вручную с помощью кнопки «x») или через диспетчер задач,IsConnected
метод, по-видимому, возвращает все еще true ..... я использую простое соединение TCP
client = new TcpClient();
client.Connect("10.0.0.2", 10);
сервер:
Socket s = tcpClient.Client;
while(true)
{
if (!IsConnected(s))
MessageBox.Show("disconnected");
}
(это работает на потоке между прочим).
Любое предложение, ребята? я даже пытался закрыть соединение, когда клиент закрывается:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
client.Close();
s.Close();
Environment.Exit(0);
}
не знаю что делать