public void HandleClients() { while (_isRunning) { lock (_lockSessions) { foreach (var session in _sessions) { byte[] bData = new byte[4096]; SessionTcpClient client = session.Value; Array.Clear(bData, 0, bData.Length); if (client.IsDead || !IsSocketConnected(client.Client)) { CloseSocket(client); continue; } else { NetworkStream stream = client.GetStream(); if (stream.CanRead && stream.DataAvailable) { int bytesRead = stream.Read(bData, 0, bData.Length); if (bytesRead > 0 && _datahandler(client, bData, bytesRead) == 0) { CloseSocket(client); continue; } } } } } } }
public void HandleClient(object obj) { SessionTcpClient client = (SessionTcpClient)obj; NetworkStream stream = client.GetStream(); bool bClientConnected = true; byte[] bData = new byte[4096]; while (bClientConnected) { Array.Clear(bData, 0, bData.Length); if (client.IsDead || !IsSocketConnected(client.Client)) { CloseSocket(client); bClientConnected = false; break; } try { if (stream.CanRead) { int bytesRead = stream.Read(bData, 0, bData.Length); if (bytesRead > 0 && _datahandler(client, bData, bytesRead) == 0) { CloseSocket(client); bClientConnected = false; } } } catch (SocketException) { CloseSocket(client); bClientConnected = false; } catch (System.IO.IOException) { CloseSocket(client); bClientConnected = false; } Thread.Sleep(1); } }