I can see that you are reading all the file in at once. But were do you create the array
How do you combine
before you call clienteStream.Write ?
On the receive side code, you have to call NetworkStream.Read until you have received all data. Data it not send in one TCP packet. A 3MB file is send in chunks, and you have to read all chunks in the receive side code.
Regards receiving side. Check out TCP/IP Protocol Design: Message Framing