0

问题:我想知道如何从流中获取所有数据。

我正在将数据从异步客户端套接字的BeginSend方法发送到客户端的方法BeginReceive。现在的目标是获取通过流的所有字节。

我创建了一个StateObject类,其中包括一个缓冲区字段类型byte[],并且它具有固定长度(当前设置为 2048)。

那么如何将检索到的字节传递给该字段呢?请记住,数据是零散的,而不是一次性的。

我必须将所有字节构造回来,因为它们是从服务器发送的。

我可以使用Array.Copy()orBuffer.BlockCopy方法,它可以完成工作吗?

关键是我必须考虑多个条件:

  • 假设 buffer[2048] 的所有索引都设置为 0

  • 在第一次复制中,起始索引将为 0(然后添加从流中获取的字节)

  • 在所有接下来的复制中,起始索引必须是数组中的第一个零(或者换句话说,所有先前复制到数组的字节的总和 - 1)。

如何做到这一点?

4

1 回答 1

0

每次触发 ReadCallback 时,缓冲区中都有 >0 字节(否则连接断开)以及在此数据块中接收到的实际字节数。每个新数据块都从缓冲区中的索引 0 开始。在每次读取回调时使用var message = new MemoryStream()and message.Write(buffer,0, bytes_received),直到收到所有数据。这将是最快的方式。

于 2012-10-25T20:14:37.840 回答