TCP is a reliable protocol. You shouldn't be able to get incorrectly assembled data...
However, maybe what you are saying is that you are getting all of the data, just in more pieces than you would like. You do not have control over this because TCP is a stream protocol. You need to deal with it properly regardless of whether Receive returns one byte at a time or
n bytes at a time. Receive is non-blocking so long as at least one byte is available.
Consider constructing a BinaryReader on top of a NetworkStream that you construct on top of the Socket. The BinaryReader.ReadBytes method will perform a blocking read for the number of bytes you request. (Alternatively, call Socket.Receive in a loop to fill the buffer to the expected number of bytes.)
See the following FAQ from Stephen Cleary for good information on this issue:
http://nitoprograms.blogspot.com/2009/04/message-framing.html