You are not guaranteed to get all the data from a single Send()
within a single Receive()
.
The TCP algorithm transparently splits your data into individual packets, and there's no direct API control over how big the packets are, or how data gets split when it's too big for a single packet. See Nagle's algorithm for the gory details of how TCP does this under the hood.
If you want to control exact packet contents and send timing, you should consider the packet based protocol UDP instead.