async void ReceiveData(TcpClient client, CancellationToken cancellationToken) { try { NetworkStream nsw = client.GetStream(); byte[] receivedBytes = new byte[2048]; int byte_count; DateTime lastNWActivity = DateTime.Now; while (client.Connected && !cancellationToken.IsCancellationRequested) { if (GetState(client) == TcpState.Established) { if ((byte_count = nsw.Read(receivedBytes, 0, receivedBytes.Length)) > 0) { TMainModel.readCommand(client, _UserID, receivedBytes, byte_count); } } } nsw.Close(); } catch (SocketException sex) { if (sex.ErrorCode == 10061) { //MessageBox.Show($"Can not connect to target machine, conenction was refused", "Network connection problem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); _CapStr = "Network Error: Can not connect to target machine"; _ActiveConnection = false; _tcpclient.Dispose(); _ActiveConnection = false; _GlobalOrderBook.Clear(); _TradeHistory.Clear(); } } catch (Exception ex) { //MessageBox.Show($"{ex.Message }", "Network connection problem", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); if (!client.Connected) { _CapStr = $"No connection"; _ActiveConnection = false; _tcpclient.Dispose(); _GlobalOrderBook.Clear(); _TradeHistory.Clear(); } } }
/// <summary> /// Handle with clients /// </summary> /// <param name="cluid">ClientUID</param> public static void HandleClients(string cluid) { try { string clientid = cluid; TcpClient Client; lock (_lock) Client = _DClients[clientid]; if (_newclientDetected) { byte[] buffer = Encoding.ASCII.GetBytes($"/CLIENTNUMBER;{clientid}"); TMainModel.Sendbuf2Client(Client, buffer); } while (true) { NetworkStream stream = Client.GetStream(); byte[] buffer = new byte[2048]; int byte_count = stream.Read(buffer, 0, buffer.Length); if (byte_count == 0) { break; } TMainModel.readCommand(Client, clientid, buffer, byte_count); } Console.WriteLine($"Client {Client.Client.RemoteEndPoint} was disconnected!!"); Logger.Log.Info($"Client {Client.Client.RemoteEndPoint} was disconnected!!"); TMainModel.RemoveClientFromDict(clientid); Client.Client.Shutdown(SocketShutdown.Both); Client.Close(); } catch (Exception ex) { TMainModel.ErrorCatcher(ex, "HandleClients"); } }