A common technique for dealing with this is to prepend the data with the length of the data. For example, if you want to send 100 bytes, encode the number '100' as a four-byte integer (or a two-byte integer...up to you) and tack it onto the front of your buffer. Thus, you would actually transmit 104 bytes with the first four bytes indicating that there are 100 bytes to follow. On the receive side, you would read the first four bytes, which would indicate you need to read an additional 100 bytes. Make sense?
As your protocol advances, you may find that you need different types of messages. So in addition to a four-byte length, you might add a four-byte message type field. This would specify to the receive what type of message is being transmitted with the length indicating how long that message is.
byte[] data = SomeData();
byte[] length = System.BitConverter.GetBytes(data.Length);
byte[] buffer = new byte[data.Length + length.Length];
int offset = 0;
// Encode the length into the buffer.
System.Buffer.BlockCopy(length, 0, buffer, offset, length.Length);
offset += length.Length;
// Encode the data into the buffer.
System.Buffer.BlockCopy(data, 0, buffer, offset, data.Length);
offset += data.Length; // included only for symmetry
// Initialize your socket connection.
System.Net.Sockets.TcpClient client = new ...;
// Get the stream.
System.Net.Sockets.NetworkStream stream = client.GetStream();
// Send your data.
stream.Write(buffer, 0, buffer.Length);