コード例 #1
0
        static void ProcessMessage(object obj)
        {
            MsgToProcess MTP            = obj as MsgToProcess;
            String       Nachrichtentyp = MTP.Message.Substring(0, 1);
            String       Argument1      = MTP.Message.Substring(1, 32);
            String       Argument2      = MTP.Message.Substring(33, 256);

            switch (Nachrichtentyp)
            {
            case "A":
            {
                //Client anmelden
                //Argument1 = Benutzername
                //Argument2 = leer
                chatclient user = AddClient(Argument1, MTP.EP);
                String     msg  = "A" + user.IDS.PadRight(32) + "".PadRight(256);
                SendMsgToClient(msg, user.EP);
                break;
            }

            case "Q":
            {
                //Client abmelden
                RemoveClient(Argument1);
                break;
            }

            case "T":
            {
                //Textnachricht empfangen
                //Argument1 = IDS
                //Argument2 = Textnachricht
                SendMsgToClients(Argument1, Argument2);
                MsgSent++;
                ausgabe();
                break;
            }

            case "S":
            {
                //Clientstatus empfangen
                SetClientActive(Argument1);
                break;
            }

            case "U":
            {
                //Benutzernamen angefragt
                SendUserNames(Argument1, MTP.EP);
                break;
            }

            default:
            {
                //unbekannte Nachricht empfangen
                //verwerfen
                break;
            }
            }
        }
コード例 #2
0
        private static void listen(Object obj)
        {
            Console.WriteLine("listener running - lausche auf {0}:{1}", ServerEP.Address, ServerEP.Port);
            // Creates an IpEndPoint to capture the identity of the sending host.
            IPEndPoint sender       = new IPEndPoint(IPAddress.Any, 0);
            EndPoint   senderRemote = (EndPoint)sender;

            byte[] msg = new Byte[1 + 32 + 256];

            while (working)
            {
                try
                {
                    s_listen.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');
                    MTP.EP      = (IPEndPoint)senderRemote;
                    ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessMessage), MTP);
                    FramesReceived++;
                    ausgabe();
                }
                catch (SocketException e)
                {
                    Console.WriteLine("SocketException aufgetreten. Errorcode: {0}, Fehlermeldung: {1}", e.ErrorCode, e.Message);
                }
            }
        }