Er schickt auch kleinere Packete, aber er macht es abhängig davon ob eine gewisse Grösse erreicht ist oder eine gewisse Zeit vergangen ist.
Dein grundlegendes Problem ist ein Verständnisproblem: Die ClientRead Procedure wird entsprechend auch mehrmals aufgerufen. Du musst also mit jedem ClientRead die Daten akkumulieren und danach schauen, ob du ein komplettes, für dich verarbeitbares, Datenpacket erhalten hast und kannst dann entsprechend
Handle() aufrufen. Von daher müsstest du deinen s_receve (receive eigentlich) als Member deklarieren, etc.