public static void Send(MsgBase msg)
    {
        if (socket == null || !socket.Connected)
        {
            return;
        }

        byte[] nameBytes = MsgBase.EcodeName(msg);
        byte[] bodyBytes = MsgBase.Encode(msg);
        Debug.Log($"[Send] {System.Text.Encoding.UTF8.GetString(nameBytes)}");
        Debug.Log($"[Send] {System.Text.Encoding.UTF8.GetString(bodyBytes)}");
        int len = nameBytes.Length + bodyBytes.Length;

        byte[] sendBytes = new byte[2 + len];//增加总消息长度
        //组装长度
        sendBytes[0] = (byte)(len % 256);
        sendBytes[1] = (byte)(len / 256);
        //组装名字
        Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length);
        //组装消息体
        Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length);
        Debug.Log($"[Send] {System.Text.Encoding.UTF8.GetString(sendBytes)}");
        //写入队列
        ByteArray ba    = new ByteArray(sendBytes);
        int       count = 0;

        lock (writeQueue)
        {
            writeQueue.Enqueue(ba);
            count = writeQueue.Count;
        }
        if (count == 1)
        {
            socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket);
        }
    }