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; } } }
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); } } }