Stream.Read
не должен выдавать исключение в конце; это возвращает что-то не положительное. Я просто читаю (...) до тех пор, пока не получу обратно, то есть
int read;
while((read = stream.Read(buffer, 0, buffer.Length) > 0) {
// process "read"-many bytes
}
Обратите внимание, что NetworkStream
имеет DataAvailable
- но это относится к буферу , а не к самому потоку (как обсуждено здесь ). Я упоминаю об этом только для того, чтобы вы не пытались использовать его, чтобы увидеть, закрыт ли поток, поскольку это не то, что он означает.
Если вы оберните Stream
в StreamReader
, вы можете использовать Peek
или EndOfStream
для проверки на закрытие:
bool isEnd = reader.EndOfStream;
или
int b = reader.Peek();
if(b < 0) {... was end ...}