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 CloseSocket(SessionTcpClient client) { SessionTcpClient removeClient; _sessions.TryRemove(client.EndPoint, out removeClient); _disconnecthandler(client); client.Client.Dispose(); client.Client.Close(); }
public void LoopClients(object obj) { while (_isRunning) { // wait for client connection SessionTcpClient newClient = new SessionTcpClient(_server.AcceptTcpClient().Client); newClient.EndPoint = newClient.Client.RemoteEndPoint.ToString(); _connecthandler(newClient); lock (_lockSessions) { _sessions.TryAdd(newClient.Client.RemoteEndPoint.ToString(), newClient); } //Thread t = new Thread(new ParameterizedThreadStart(HandleClient)); //t.Start(newClient); } }
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); } }