项目场景:
提示:这里简述项目相关背景:
在处理网络数据的时候,如果数据量过大,就会存在包不完整,发送的数据存在断断续续的问题,为了解决这个问题,我整理出以下方案,只是个人观点,需要自拿
问题描述
提示:这里描述项目中遇到的问题:
处理网络数据,分包,拼接数据处理
解决方案:
static List<byte> buffer = new List<byte>();
void ProcessReceivedData(byte[] receivedData)
{
buffer.AddRange(receivedData); // 将接收到的数据添加到缓冲区
//GameLogger.LogCyan($"缓冲大小: {buffer.Count }");
// 检查是否有足够数据组成完整数据包
while (buffer.Count >= 36) // 假设完整数据包长度为5
{
if ( buffer[0]== 170 && buffer[ 1] == 170 && buffer[2] == 4)
{
byte[] packet = buffer.GetRange(0, 8).ToArray(); // 取出完整数据包
buffer.RemoveRange(0, 8); // 从缓冲区中移除已处理的数据
// 处理完整的数据包
ProcessPacketRAW(packet);
}
else if (buffer[0] == 170 && buffer[1] == 170 && buffer[2] == 32)
{
byte[] packet = buffer.GetRange(0, 36).ToArray(); // 取出完整数据包
buffer.RemoveRange(0, 36); // 从缓冲区中移除已处理的数据
// 处理完整的数据包
ProcessPacketMED(packet);
}
else
{
// GameLogger.LogCyan($"缓冲大小: {buffer.Count },校验数据{buffer[0]}校验下一位 {buffer[ 1]}");
buffer.RemoveRange(0,1); // 从缓冲区中移除已处理的数据
}
}
}
void ProcessPacketRAW(byte[] packet)
{
// GameLogger.LogYellow(" packet RAW: " + BitConverter.ToString(packet));
}
void ProcessPacketMED(byte[] packet)
{
// GameLogger.LogYellow(" packet RAW: " + BitConverter.ToString(packet));
}