C#如何处理大字节数组?

C#如何处理大字节数组?,c#,sockets,tcp,C#,Sockets,Tcp,我正在TCP客户端中接收数据包,其工作原理如下: 服务器发送一个数据包,其中前两个字节是数据包大小信息。 例如:0C 00=12字节长度。 但是,有一个问题(经常发生),服务器在同一个缓冲区中发送大量“数据包”,有时缓冲区缺少将到达下一个缓冲区的字节。 我现在有什么: 带有Send/Recv的简单tcp套接字。 用于处理字节的列表,其中我使用.AddRange添加字节。 “切割”数组后的后处理 它是有效的,但有时事情并不正确(客户看起来好像忽略了数据包) 对不起,我的英语不好,这是我的代码: b

我正在TCP客户端中接收数据包,其工作原理如下: 服务器发送一个数据包,其中前两个字节是数据包大小信息。 例如:0C 00=12字节长度。 但是,有一个问题(经常发生),服务器在同一个缓冲区中发送大量“数据包”,有时缓冲区缺少将到达下一个缓冲区的字节。 我现在有什么: 带有Send/Recv的简单tcp套接字。 用于处理字节的列表,其中我使用.AddRange添加字节。 “切割”数组后的后处理

它是有效的,但有时事情并不正确(客户看起来好像忽略了数据包) 对不起,我的英语不好,这是我的代码:

bufferList = new List<byte>();
private void WaitData(IAsyncResult ar)
    {

        try
        {
            Int32 size = socket.EndReceive(ar);
            if (size > 0)
            {
                Array.Resize(ref buffer, size);
                bufferList.AddRange(buffer);
                dataProcessor();

            }
        }
        catch (Exception ex)
        {
            Functions.logMessage(logger, "Erro no wait data " + ex.Message, 1);
        }
        finally
        {
            buffer = new byte[100000];
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, WaitData, null);
        }

    }
 public void dataProcessor() //byte[] data
    {
            while (bufferList.Count > 0)
            {
                int size = (Int32)(BitConverter.ToInt16(bufferList.Take(2).ToArray(), 0));
                postProcess(bufferList.Take(size).ToArray());
                bufferList.RemoveRange(0, size);
            }
    }
bufferList=newlist();
私有void WaitData(IAsyncResult ar)
{
尝试
{
Int32大小=套接字.EndReceive(ar);
如果(大小>0)
{
调整数组大小(参考缓冲区,大小);
bufferList.AddRange(缓冲区);
数据处理器();
}
}
捕获(例外情况除外)
{
功能。logMessage(记录器,“错误无等待数据”+ex.Message,1);
}
最后
{
缓冲区=新字节[100000];
socket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,WaitData,null);
}
}
public void dataProcessor()//字节[]数据
{
而(bufferList.Count>0)
{
int size=(Int32)(BitConverter.ToInt16(bufferList.Take(2.ToArray(),0));
后处理(bufferList.Take(size.ToArray());
bufferList.RemoveRange(0,大小);
}
}

您正在使用.net core吗?如果是这样的话,看看
System.Memory.Span
哦,我来看看。谢谢