Sorry, dass ich einen so alten Thread aufwärme, aber ich habe ein Verständnisproblem mit der folgenden Erklärung:
[…] Grundlegender Ablauf, welcher in deiner ClientRead sein sollte:
1. neue Daten empfangen
2. neue Daten an den Puffer hinten anhängen (s_receive bei dir)
3. vom Anfang des Puffers nachschauen ob ein komplettes Packet enthalten ist (wenn nein, dann Schritt 7)
4. das empfangene Packet aus dem Puffer rausschneiden (also Puffer vorne um diese Länge kürzen)
5. rausgeschnittenes Packet verarbeiten (deine
Handle() Methode)
6. zurück zu Punkt 4 (es können mehr als ein komplettes Packet angekommens ein)
7. fertig, Ende der OnClientRead
[…]
Im Schritt 5 wird ein Paket mit
Handle() verarbeitet.
Aber was passiert, wenn
Handle() sehr lange braucht und in der Zwischenzeit über die
TCP-Verbindung neue Daten eintreffen,
wie wird dann "hintenrum" verfahren(?):
- Wird ClientRead parallel (also in einer neuen "Instanz") aufgerufen? (da müssten ClientRead und auch
Handle() ja threadsicher sein)
- Oder wartet "die Verbindung" so lange, bis
Handle() abgelaufen ist, und ruft dann ClientRead erneut auf?
Falls das eine Rolle spielt, ich verwende einen nicht-blockierenden ServerSocket.
Grüße
Caps