Используйте этот метод для правильного чтения из потока:
public static void ReadWholeArray (Stream stream, byte[] data)
{
int offset=0;
int remaining = data.Length;
while (remaining > 0)
{
int read = stream.Read(data, offset, remaining);
if (read <= 0)
throw new EndOfStreamException
(String.Format("End of stream reached with {0} bytes left to read", remaining));
remaining -= read;
offset += read;
}
}
Вы можете сначала записать длину файла в поток (скажем, как int), например,
сторона сервера:
server.Write(clientData.Length)
server.Write(clientData);
сторона клиента:
byte[] size = new byte[4];
ReadWholeArray(stream, size);
int fileSize = BitConverter.ToInt32(size, 0);
byte[] fileBytes = new byte[fileSize];
ReadWholeArray(stream, fileBytes);
Подробнее о чтении из потоков см. http://www.yoda.arachsys.com/csharp/readbinary.html.