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

时间:2018-09-07 17:53:53

标签: c# sockets tcp

我正在我的TCP客户端中接收数据包,这是这样的: 服务器发送一个数据包,其中前两个字节是数据包大小信息。 例如:0C 00 = 12个字节的长度。 但是,有一个问题(可能很多),服务器在同一缓冲区中发送了很多“数据包”,有时缓冲区中缺少将要到达下一个缓冲区的字节。 我现在有什么: 一个带有发送/接收的简单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);
            }
    }

0 个答案:

没有答案