/// <summary> /// Performs all socket listening actions. /// </summary> private void Listen() { try { while (true) { if (!sck.Connected) { throw new SocketException(10054); } localBuffer = new byte[sck.SendBufferSize]; int bytesRead = sck.Receive(localBuffer, sck.SendBufferSize, SocketFlags.None); if (bytesRead == 0) { Connected = false; Debug.WriteLine("Server disconnected. Closing socket..."); sck.Close(); Debug.WriteLine("Socket closed. Successfully disconnected from server."); tsslStatus.Text = "Disconnected from receiver."; } /** Format buffer to take care of whitespace or extra crap*/ List <byte> formatted = new List <byte>(bytesRead); for (int i = 0; i < bytesRead; i++) { if (localBuffer[i] != default(byte)) { formatted.Add(localBuffer[i]); } } string strData = Encoding.ASCII.GetString(formatted.ToArray()).Trim(); if (string.IsNullOrWhiteSpace(strData)) { continue; } List <string> toks = strData.Split(' ').ToList(); string protocol = toks[0]; if (Numerics.ContainsKey(protocol)) { Numerics[protocol](toks); } else { Debug.WriteLine("Server sent erroneous protocol. Message was '" + strData + "'"); } } } catch (SocketException error) { Debug.WriteLine("Socket error: " + error.Message); tsslStatus.Text = "Disconnected from receiver."; } }