Zitat von
Florian Bernd:
Meinen Beispielchat mal angeguckt?
Ok, habe ich nun gemacht.
- Warum nutzt du einen TMemoryStream beim versenden der Daten? Schick damit mal eine 4 GB Datei und schon kratzt er erstmal stundenlang seine Swap Datei voll. Und warum kein SendStream() der TCustomWinSockets nutzen? Dieser kehrt sofort zurück und wartet nicht, bis alles im Socket Buffer ist...
- Warum definierst du eigene Typen für Objektmethoden die schon definiert sind? z.B. hättest du dir einfach TOnRead = TNotifyEvent;
definieren können.
- Was sollen die Sleep()'s zwischen den Teilstrings? Dein Protokoll teilt die Teilstrings und nicht eine Pause zwischen dem absenden. Benutz dein Chat mal über ein wackliges Netzwerk und du wirst dich freuen, weil diese Teilung völlig nichtig ist.
- Mit dem "StLG:" und der angehängten ASCII Zahl gehst du auch fest davon aus, dass du eine Teilung bekommst, wenn du die Strings mit einem Sleep() trennst beim senden. Dem ist nicht so - dafür gibt es überhaupt keine Handhabe. Da dies in deinem LAN funktioniert sagt nichts aus.
- Dein Splitten des Strings beachtet keine Verschiebung, falls z.B. das Sleep() mal nicht gewirkt hat oder noch ein Zeichen vom letzten Kommando im Stream war.
- OnFileReadF(): Du schaust nirgendwo, wieviel überhaupt empfangen wurde. Was ist, wenn du vom Socket aufgerufen wird aber dieser gerade mal "Date" empfangen hat? Dein Vergleich geht schief und er schaltet nie in den Datenmodus, da er dieses niemals erreicht.
- OnFileReadF(): du beachtest überhaupt nicht wieviel eigentlich noch zur Datei gehört. Du vergleichst auf grösser gleich und schreibst alles was im Socket Buffer ist direkt in die Datei. Somit wird die Datei mit deinem Chat sogar grösser nach der Übertragung.
Das wolltest du bestimmt nicht hören, aber es sind viele Faktoren die gegen eine sichere Funktionsweise des Chats sprechen.