我正在尝试在C#中接收tcp数据包,但我不知道何时可以停止从流中读取。 这是我尝试过的:
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);
}
有什么事可做吗? 谢谢:))
答案 0 :(得分:4)
我们走了:
int read;
while((read = stm.Read(bb, 0, bb.Length)) > 0) {
// process "read"-many bytes from bb
ns.Write(bb, 0, read);
}
“read”在流的末尾将是非正数,并且仅在流的末尾。
或更简单(在4.0中):
stm.CopyTo(ns);
答案 1 :(得分:1)
二进制阅读器是您需要的,因为它确切地知道要读取多少字节!
它是字节长度的前缀,因此它知道要读多少!