1. Kleiner Tipp: Du kannst an TCustomWinSocket.Data beliebige Daten hinterlegen - z.B. eine Instanz
2. Du versuchst fest mit SizeOf(TClientList) die Daten zu lesen - ohne überhaupt zu schauen wieviel da ist. Siehe
ReceiveLength()
3. Ein MemoryStream.Clear würde auch die Daten und Bytes rauslöschen, die du vllt. schon vom nächsten Record empfangen hast.