/// <summary> /// Callback-Methode zum Empfangen von Nachrichten. /// </summary> /// <param name="result"></param> private void readCallback(IAsyncResult result) { // Client von dem Nachricht erhalten wurde wird als result übergeben. Client client = result.AsyncState as Client; try { // Prüfung ob Client valide und verbunden ist. if (client == null) return; if (client.Tcpclient.Connected) { // Stream holen und Lesevorgang abschließen. NetworkStream networkStream = client.Networkstream; int read = networkStream.EndRead(result); // Falls 0 bytes gesendet wurden, wird der Client entfernt. if (read == 0) { lock (this.clients) { this.clients.Remove(client); // ClientDisconnected Event ausführen. OnClientDisconnected(new ClientDisconnectedEventArgs(client.Tcpclient)); return; } } // Tatsächlich empfangene Bytes in neues Array kopieren. byte[] actualBytes = new byte[read]; Array.Copy(client.Buffer, actualBytes, read); // Neuen Lesevorgang mit Clienten starten. client.ClearBuffer(); networkStream.BeginRead(client.Buffer, 0, client.Buffer.Length, readCallback, client); // PacketReceived Event ausführen. OnPacketReceived(new PacketReceivedEventArgs(client.Tcpclient, actualBytes, read)); } } catch (System.IO.IOException) { // Bei IO-Fehlern den Client entfernen. if (client != null) { lock (this.clients) { this.clients.Remove(client); } OnClientDisconnected(new ClientDisconnectedEventArgs(client.Tcpclient)); } } }