Проблема может заключаться в том, что вы используете один и тот же сокет для отправки нескольких «вещей» данных.Возможно, вы знаете, что отправили строку, а затем изображение, но TCP не видит отдельные объекты, только один поток байтов.
Вы также не можете знать, сколько вызовов чтения вам нужносделать, чтобы получить ваш «первый» объект данных.Разграничение нескольких объектов выходит за рамки TCP.Дело в том, что эту проблему лучше всего решить, используя один сокет на транзакцию.Создайте сокет, запишите все свои данные в него одним вызовом записи, затем закройте сокет.Попросите клиента прочитать, пока у вас не будут полные данные.Если вам нужно отправить что-то еще, создайте новый сокет.
Я знаю, что это не относится к классу NetworkStream, но я надеюсь, что это поможет.