C# TCP-сервер не реагирует на отключение клиентов
На C# есть сервер TCP, который постоянно ждет новых подключений, данные пока не отправляет. Клиентом выступают ардуинки, которые подключены к коммутатору. При запуске сервера и старте ардуино идет подключение клиентов, но когда я начинаю отключать клиентов, то никакой реакции со стороны сервера нет вообще.
class Program
{
const int port = 8888; // порт для прослушивания подключений
static void Main()
{
TcpListener server = null;
try
{
IPAddress localAddr = IPAddress.Parse("192.168.0.100");
server = new TcpListener(localAddr, port);
server.Start();
var clients = new List<TcpClient>();
while (true)
{
Console.WriteLine("Ожидание подключений... ");
// получаем входящее подключение
TcpClient client = server.AcceptTcpClient();
clients.Add(client);
Console.WriteLine("Подключен клиент.");
Console.WriteLine("Кол-во подключенных клиентов: " + clients.Count);
Task.Run(async() =>
{
var blocking = client.Client.Blocking;
do
{
try
{
byte[] tmp = new byte[1];
client.Client.Blocking = false;
client.Client.Send(tmp, 0, 0);
Console.WriteLine("Подключен!");
}
catch (SocketException e)
{
if (e.NativeErrorCode.Equals(10035))
Console.WriteLine("Подключен!");
else Console.WriteLine("Не подключен!");
break;
}
finally
{
client.Client.Blocking = blocking;
}
await Task.Delay(1000);
}
while (true);
});
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
if (server != null)
server.Stop();
}
}
}