c#socket接收字节数组长度我正在尝试学习在c#中使用socket,我有疑问,我正在使用这样的代码:新字节[64];整数长度=0;length=sock.Receive(数据);//morecode...因此,byte[]数据填充的是回收数据,数组中左边空间填充0,byte[]是否在内存中完全分配(全部64字节)?如果是这样,有没有办法使byte[]与实际发送的数据大小相同?你可以检查sock.Available看看有什么进来。(到目前为止)byte[]data=newbyte[sock.Available];intlength=sock.Receive(数据);//更多代码...注意:由于您可能知道也可能不知道网络上接下来会发生什么,因此首先只读取标题(带有大小信息)或分配比必要更多的空间并调用.Recieve通常更有意义()多次,直到到达记录的末尾。注意:此代码假定您已经知道有一些数据要接收,并且您已经等待了足够长的时间以准备好一些有用的数据。如果您确实选择使用长度标头,.Available可以让您免于读取部分标头并不得不重新组装它,这很好。(在这种情况下,只有大型消息可能需要手动重新组装)如前所述,读取后返回的字节通常较少。请参阅下面的解决方法函数,该函数确保它读取的字节数与它被告知的一样多——基本上是传递的缓冲区的大小。功能来自这里。///将数据读入一个完整的数组,抛出EndOfStreamException///如果流首先用完数据,或者如果IOException///自然发生。//////从中读取数据的流///要将字节读入的数组。数组///将从流中完全填充,因此必须提供适当的///大小。publicstaticvoidReadWholeArray(Streamstream,byte[]data){intoffset=0;intremaining=data.Length;while(remaining>0){intread=stream.Read(data,offset,remaining);if(read你可以先用它来读取一个2字节的整数,它应该代表接下来的字节数。然后你再次读取,但现在读取该两字节整数中指定的字节数。但是为了这个要工作,显然发送方首先必须发送一个表示数据长度的双字节整数-然后是数据本身。所以基本上你首先在大小为2的字节数组上调用上面的函数(以获取数据长度)然后调用字节数组的大小,如2字节整数所示(以获取数据)。您可以使用它从NetworkStream中读取。阅读有关此主题的更多信息。您只需使用Receive的返回值就可以知道有多少数据到达。如果需要,您可以使用Array.Resize来缩短缓冲区,但这通常表示存在问题。还要注意TCP是字节流,不会保留消息边界。以上就是C#学习教程:c#socket接收字节数组长度共享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注---本文收集自网络,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
