private void listen(Object obj)
        {
            byte[]     msg          = new Byte[1 + 32 + 256];
            IPEndPoint sender       = new IPEndPoint(IPAddress.Any, 0);
            EndPoint   senderRemote = (EndPoint)sender;

            while (working)
            {
                try
                {
                    s.ReceiveFrom(msg, 0, msg.Length, SocketFlags.None, ref senderRemote);
                    Console.WriteLine(System.Text.Encoding.UTF8.GetString(msg).TrimEnd('\0'));
                    MsgToProcess MTP = new MsgToProcess();
                    MTP.Message = System.Text.Encoding.UTF8.GetString(msg).TrimEnd('\0');
                    Console.WriteLine(System.Text.Encoding.UTF8.GetString(msg).TrimEnd('\0'));
                    ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessMessage), MTP);
                }
                catch (SocketException e)
                {
                    addLineToChat("Fehler beim Starten des Listeners. Errorcode: " + e.ErrorCode.ToString());
                    addLineToChat(e.Message);
                }
            }
        }
        void ProcessMessage(object obj)
        {
            MsgToProcess MTP = obj as MsgToProcess;

            Console.WriteLine("Nachricht verarbeiten: {0}", MTP.Message);
            String Nachrichtentyp = MTP.Message.Substring(0, 1);
            String Argument1      = MTP.Message.Substring(1, 32).Trim();
            String Argument2      = MTP.Message.Substring(33, 256).Trim();

            switch (Nachrichtentyp)
            {
            case "A":
            {
                //Client anmelden
                //Argument1 = Benutzername
                //Argument2 = leer
                if (!Argument1.Equals(username))
                {
                    IDS = Argument1.Trim();
                    Console.WriteLine("IDS gesetzt");
                }
                break;
            }

            case "T":
            {
                //Textnachricht empfangen
                //Argument1 = Benutzername
                //Argument2 = Textnachricht
                if (IDS != null)
                {
                    addLineToChat("[" + Argument1 + "]: " + Argument2);
                }
                break;
            }

            case "S":
            {
                //Statusabfrage empfangen
                //Argument1 = IDS
                //Argument2 = Leer
                if (IDS != null)
                {
                    if (Argument1 == IDS)
                    {
                        //Msg unverändert zurücksenden
                        SendToServer(MTP.Message);
                    }
                    UInt16 anzClients;
                    if (UInt16.TryParse(Argument2, out anzClients))
                    {
                        if (anzClients != Benutzerliste.Items.Count)
                        {           //anzahl der Benutzer stimmt nicht mehr
                            Benutzerliste.Invoke(new Action(() => Benutzerliste.Items.Clear()));
                            SendToServer("U" + IDS.PadRight(32) + "".PadRight(256));
                        }
                    }
                }
                break;
            }

            case "U":
            {
                //Nutzerverzeichnis empfangen
                //Argument1 = Benutzername
                //Argument2 = Leer
                if (IDS != null)
                {
                    addLineToUserList(Argument1);
                }
                break;
            }

            default:
            {
                //unbekannte Nachricht empfangen
                //verwerfen
                break;
            }
            }
        }