Wahrscheinlich hast du den Stream noch nicht "zurückgespult".
Stream.Seek(0, soFromBeginning)
So einen Stream musst du dir wie eine Videokassette vorstellen. Wenn er beschrieben/gelesen wird, ändert sich die Position des Bandes/die Postition-Property.
So auch in deinem Fall. Du liest die Daten aus der Verbindung in den Stream. Dadurch steht die Position am Ende.
Wenn du dann dem Stream sagst: Lies mal bitte (z.B.) 4 Byte, gibts nen Fehler, weil ab der aktuellen Position keine 4 Byte verfügbar sind.