Я пытаюсь отключить клиента от сервера, но сервер по-прежнему видит его подключенным.Я не могу найти решение этой проблемы, и выключение, отключение и закрытие не работают.
Некоторый код для моего отключения от клиента и проверки на сервере:
Клиент:
private void btnDisconnect_Click(object sender, EventArgs e)
{
connTemp.Client.Shutdown(SocketShutdown.Both);
connTemp.Client.Disconnect(false);
connTemp.GetStream().Close();
connTemp.Close();
}
Сервер:
while (client != null && client.Connected)
{
NetworkStream stream = client.GetStream();
data = null;
try
{
if (stream.DataAvailable)
{
data = ReadStringFromClient(client, stream);
WriteToConsole("Received Command: " + data);
}
} // So on and so on...
Естьбольше пишет и читает дальше в коде.
Надеюсь, что вы все можете помочь.
ОБНОВЛЕНИЕ: Я даже пытался передать TCP-клиент по ref, предполагая, что была проблема с областью действия и client.Connected остается верным даже после чтения.Что не так?
Второе обновление !!:
Вот решение проблемы.Посмотрите и, основываясь на этом, определите, подключены вы или нет.
if (client.Client.Poll(0, SelectMode.SelectRead))
{
byte[] checkConn = new byte[1];
if (client.Client.Receive(checkConn, SocketFlags.Peek) == 0)
{
throw new IOException();
}
}