ну, вонючие, мы должны написать цикл, но мне бы все-таки понравилось, если бы кто-то поместил цикл в это сообщение на форуме, чтобы я мог вырезать и вставить его очень быстро ... это было мое (и да, я хотел бы скорее основа во времени, но это только для модульных тестов, и они управляют имитируемым сервером, поэтому мне все равно + я не хочу, чтобы мой модульный тест зависал при сбое при вызове моего метода Read)

оложим, у меня есть простой протокол, реализованный через TCP, где каждое сообщение состоит из:

int с указанием длины данных.Двоичные данные, длина которых указана в 1.

Читая такое сообщение, я хотел бы что-то вроде:

int length = input.ReadInt();
byte[] data = input.ReadBytes(length);

С помощьюSocket.Receive или жеNetworkStream.Read Доступное количество байтов считывается. Я хочу позвонитьReadBytes блокировать доlength байты доступны.

Есть ли простой способ сделать это, без необходимости циклически читать, перезапуская со смещения в ожидании оставшихся данных?

В реальном приложении чтение, вероятно, должно выполняться в асинхронном режиме или в фоновом потоке, но я пока проигнорировал это. Важно иметь возможность завершить чтение, пока не будут доступны все данные.

редактировать

Я знаю, что могу буферизовать данные самостоятельно, и я знаю, как это сделать. Это просто петля вокругReceive это продолжается при следующем смещении.Я спрашиваю, есть ли многократно используемая реализация такого циклабез необходимости какого-либо собственного цикла (или, альтернативно, многоразовой реализации Async, которая завершается, когда все данные доступны).

Ответы на вопрос(6)

Ваш ответ на вопрос