Необходимо объяснить поведение NetworkStream.Read - PullRequest
1 голос
/ 10 июня 2011

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

Do
  NetworkStream.Read(Bytes, 0, ReceiveBufferSize)
  'Do stuff with data here
Loop

Наблюдая за тем, как пакеты поступают по проводам в Wireshark, я вижу, что иногда, когда приходит новый пакет, .NET видит его немедленно и разблокирует, позволяя мне обработать его. В других случаях несколько пакетов будут поступать по сети до того, как NetworkStream.Read разблокирует и вернет весь лот за один раз - я видел до 8 пакетов буфера, прежде чем чтение NetworkStream разблокирует.

Это ожидаемое поведение? Есть ли способ получить и обработать каждый пакет сразу после его получения по проводам? Будет ли модель приема Async иметь какое-то значение здесь? Или я просто не понимаю, как работают потоки TCP?

...