Как узнать, что поток закончился C # - PullRequest
1 голос
/ 27 февраля 2012

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

for(int i = 0; i < stm.Length; i += chunkSize)
{
    bb = new byte[chunkSize];
    k = stm.Read(bb, 0, bb.Length);
    ns.Write(bb, 0, k);
}

Но это сбило меня с толку о том, что поток недоступен для поиска. Итак, я попробовал это:

int k = chunkSize;

while (k == chunkSize)
{
    bb = new byte[chunkSize];
    k = stm.Read(bb, 0, bb.Length);
    ns.Write(bb, 0, k);
}

Есть что-нибудь сделать? Спасибо:)

Ответы [ 2 ]

4 голосов
/ 27 февраля 2012

Вот так:

int read;
while((read = stm.Read(bb, 0, bb.Length)) > 0) {
    // process "read"-many bytes from bb
    ns.Write(bb, 0, read);
}

«чтение» будет не положительным в конце потока и только в конце потока.

Или проще (в 4.0):

stm.CopyTo(ns);
1 голос
/ 27 февраля 2012

a двоичный считыватель - это то, что вам нужно, поскольку он точно знает, сколько байтов нужно прочитать!

Это префикс длины байтов, и поэтому он знает, сколько читать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...