public static void UdpSocketRead(ref UdpClient UdpListener, ref TCommands RcvCmds, ref ByteArray RecBuf, TDecodePacketProc DecodeProc, byte XorByte, IPEndPoint _endPoint)
    {
        if (UdpListener != null && UdpListener.Available > 0)
        {
            byte[] udpTempBuf = new byte[Max_ReceiveSize];

            udpTempBuf = UdpListener.Receive(ref _endPoint);
            int size = udpTempBuf.Length;
            if ((size > 0) && (size + RecBuf.Size <= RecBuf.Data.Length))
            {
                if (XorByte > 0)
                {
                    for (int i = 0; i < udpTempBuf.Length; i++)
                    {
                        udpTempBuf[i] = (byte)(udpTempBuf[i] ^ XorByte);
                    }
                }

                Array.Copy(udpTempBuf, 0, RecBuf.Data, RecBuf.Index, size);
                RecBuf.Size += size;

                while (RecBuf.Size > 0)
                {
                    if (DecodeProc(ref RcvCmds.Cmds[RcvCmds.CmdTail], ref RecBuf))
                    {
                        RcvCmds.CmdTail++;
                        if (RcvCmds.CmdTail == RcvCmds.CmdHead)
                        {
                            RcvCmds.CmdTail = 0;
                            RcvCmds.CmdHead = 0;
                        }

                        if (RcvCmds.CmdTail > RcvCmds.Cmds.GetUpperBound(0))
                        {
                            RcvCmds.CmdTail = 0;
                        }

                        if (RecBuf.Index > 0 && RecBuf.Index < RecBuf.Size)
                        {
                            Array.Copy(RecBuf.Data, RecBuf.Index, RecBuf.Data, 0, size - RecBuf.Index);
                            RecBuf.Size -= RecBuf.Index;
                        }
                        else
                        {
                            RecBuf.Size = 0;
                        }

                        RecBuf.Index = 0;
                    }
                    else
                    {
                        return;
                    }
                }
            }
        }
    }
    public static void SocketRead(ref Socket Socket, ref TCommands RcvCmds, ref ByteArray RecBuf, TDecodePacketProc DecodeProc, byte XorByte)
    {
        if (Socket == null)
        {
            return;
        }
        if (Socket.Connected == false)
        {
            return;
        }
        if (Socket != null && Socket.Available > 0)
        {
            //野汪修正 續傳Buf不夠問題
            Array.Clear(mSocketTempBuf, 0, mSocketTempBuf.Length);

            int count = Socket.Receive(mSocketTempBuf);
            int size  = Math.Min(mSocketTempBuf.GetUpperBound(0) + 1, count);

            if ((size > 0) && (size + RecBuf.Size <= RecBuf.Data.Length))
            {
                if (XorByte > 0)
                {
                    for (int i = 0; i < mSocketTempBuf.Length; i++)
                    {
                        mSocketTempBuf[i] = (byte)(mSocketTempBuf[i] ^ XorByte);
                    }
                }

                Array.Copy(mSocketTempBuf, 0, RecBuf.Data, RecBuf.Size, size);
                RecBuf.Size += size;

                while (RecBuf.Size > 0)
                {
                    if (DecodeProc(ref RcvCmds.Cmds[RcvCmds.CmdTail], ref RecBuf))
                    {
                        RcvCmds.CmdTail++;
                        if (RcvCmds.CmdTail == RcvCmds.CmdHead)
                        {
                            RcvCmds.CmdTail = 0;
                            RcvCmds.CmdHead = 0;
                        }

                        if (RcvCmds.CmdTail > RcvCmds.Cmds.GetUpperBound(0))
                        {
                            RcvCmds.CmdTail = 0;
                        }

                        if (RecBuf.Index > 0 && RecBuf.Index < RecBuf.Size)
                        {
                            Array.Copy(RecBuf.Data, RecBuf.Index, RecBuf.Data, 0, RecBuf.Size - RecBuf.Index);
                            RecBuf.Size -= RecBuf.Index;
                        }
                        else
                        {
                            RecBuf.Size = 0;
                        }

                        RecBuf.Index = 0;
                    }
                    else
                    {
                        return;
                    }
                }
            }
        }
    }