Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步客户端套接字-构造回字节数组_C#_Sockets_Asynchronous_Bytearray - Fatal编程技术网

C# 异步客户端套接字-构造回字节数组

C# 异步客户端套接字-构造回字节数组,c#,sockets,asynchronous,bytearray,C#,Sockets,Asynchronous,Bytearray,问题:我想知道如何从流中获取所有数据 我正在将数据从异步客户端套接字的BeginSend方法发送到客户端的BeginReceive方法。现在的目标是获取通过流传递的所有字节 我创建了一个StateObject类,它包括一个缓冲区字段类型byte[],它有一个固定的长度(当前设置为2048) 那么,如何将检索到的字节传递到此字段?请记住,数据是以片段的形式出现的,而不是一次全部出现 我必须将所有字节构造回从服务器发送时的状态 我可以使用Array.Copy()或Buffer.BlockCopy方法

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

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

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

那么,如何将检索到的字节传递到此字段?请记住,数据是以片段的形式出现的,而不是一次全部出现

我必须将所有字节构造回从服务器发送时的状态

我可以使用
Array.Copy()
Buffer.BlockCopy
方法吗,它能完成任务吗

我必须考虑多个条件:

  • 让我们假设缓冲区[2048]的所有索引都设置为0

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

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


如何实现这一点?

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