private void ListeningForConnectionTCP() { try { TcpListener = new TcpListener(IPAddress.Any, 1337); TcpListener.Start(); ServerVM.WriteToLog($"TCP-Server gestartet.\nPort: 1337"); while (!CloseApplication) { Thread.Sleep(20); //blocks until a client has connected to the server if (TcpListener.Pending()) { TcpClient client = TcpListener.AcceptTcpClient(); if (null != client) { SocketMember member = new SocketMember(client); NetworkStream clientStream = client.GetStream(); byte[] message = new byte[4096]; // Dies ist unser Buffer int bytesRead; bytesRead = clientStream.Read(message, 0, 4096); // Hier warten wir darauf bis der Client uns Daten sendet - diese werden in einem ByteArray gespeichert if (bytesRead > 0) { String receivedMessage = new ASCIIEncoding().GetString(message); member.Name = receivedMessage; member.LoginTime = DateTime.Now; } ListOfAllConnectedMember.Add(member); } //create a thread to handle communication //with connected client Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm)); clientThread.Start(client); } } } catch (Exception ex) { string msg = "Ein Fehler ist aufgetreten: " + ex.Message; Console.WriteLine(msg); ServerVM.WriteToLog(msg); } TcpListener.Stop(); }
private void HandleClientComm(Object client) // Der Delegate erwartet einen Typ "Object" { TcpClient Client = (TcpClient)client; // Diesen casten wir in "TcpClient" SocketMember tempMember = ListOfAllConnectedMember.SingleOrDefault(c => c.TcpClient == Client); if (tempMember.Name.Contains('\0')) { tempMember.Name = tempMember.Name.Split('\0').First(); } string msg = $"Willkommen <{tempMember.Name}>. Sie wurden vom Server erfasst"; // Nachricht wird an Client gesendet //tempMember.SendToClient(msg); ServerVM.WriteToLog(msg); }