//토탈 버퍼에 담아서 받은 패킷 나눠주는 처리 한다. void Total_Recv_Operation(int _Recv_Buffer_Size, byte[] _Recv_Buffer) { try { //토탈 버퍼에 현재 받은 데이터 담기 Array.Copy(_Recv_Buffer, 0, Total_Recv_Buffer, Total_Buffer_Max_Index, _Recv_Buffer_Size); Total_Buffer_Max_Index += _Recv_Buffer_Size; ByteData _Buffer_Data = new ByteData(Total_Recv_Buffer); while (true) { //헤더검사를 할수 있을만큼 남았는지 체크 if (Total_Buffer_Max_Index <= (_Buffer_Data.DataIndex + 4)) { break; } //헤더 문자열 일치 체크 if (_Buffer_Data.Getbyte() != HeaderData[0]) { continue; } if (_Buffer_Data.Getbyte() != HeaderData[1]) { _Buffer_Data.DataIndex--; continue; } //헤더 길이 만큼 전체 데이터 받았는지 체크 short _Data_Length = _Buffer_Data.Getshort(); if (Total_Buffer_Max_Index < _Buffer_Data.DataIndex + _Data_Length) { _Buffer_Data.DataIndex -= 4; break; } //길이 읽은거 다시 감소 _Buffer_Data.DataIndex -= 2; Receive_Delegate(_Buffer_Data.GetBytes()); } //처리한 버퍼 지우고 뒤에 남은 버퍼 앞으로 땡기자 Total_Buffer_Max_Index -= _Buffer_Data.DataIndex; byte[] Temp_Array = new byte[Total_Buffer_Max_Index]; Array.Copy(Total_Recv_Buffer, _Buffer_Data.DataIndex, Temp_Array, 0, Temp_Array.Length); Array.Copy(Temp_Array, 0, Total_Recv_Buffer, 0, Temp_Array.Length); } catch (Exception ex) { Error_DisConnect(ex); } }