未将对象引用设置到对象的实例,

       private void ReceiveCalBback(IAsyncResult ar)
        {
            try
            {
                int len = m_Socket.EndReceive(ar);
                if (len > 0)
                {
                    //已经接收到数据
                    //把接收到的数据 写入缓冲区的尾部 
                    m_ReceiveMS.Position = m_ReceiveMS.Length;
                    //把指定长度的字节 写入数据流中
                    m_ReceiveMS.Write(m_ReceiveBuffer, 0, len);
                    //判读流中包体的长度
                    if (m_ReceiveMS.Length > 2)
                    {
                        //进行循环 拆分数据包  粘包处理
                        while (true)
                        {
                            //把数据流指针放到0处
                            m_ReceiveMS.Position = 0;
                            //计算包体的长度
                            //ushort msgLen = m_ReceiveMS.ReadUShort();
                            int flag = m_ReceiveMS.ReadInt();//判断识别t头
                            int seq = m_ReceiveMS.ReadInt();//判断包序号
                            int msgLen = m_ReceiveMS.ReadInt();//识别包体长度

                            if (flag == Program.frm1.flag)
                            {
                                //计算总包的长度
                                int countMsgLen = 12 + msgLen;
                                //判读流中数据 是否完整
                                if (m_ReceiveMS.Length >= countMsgLen)
                                {
                                    byte[] buffer = new byte[msgLen];
                                    m_ReceiveMS.Position = 12;
                                    m_ReceiveMS.Read(buffer, 0, msgLen);
                                    //解密数据
                                    int k = 0;
                                    byte[] decodeBuffer = new byte[buffer.Length];
                                    for (int i = 0; i < buffer.Length; i++)
                                    {
                                        decodeBuffer[i] = (byte)(buffer[i] ^ Program.frm1.keyArray[k]);
                                        k++;
                                        if (k == Program.frm1.keyArray.Length)
                                        {
                                            k = 0;
                                        }
                                    }
                                    using (MMO_MemoryStream ms2 = new MMO_MemoryStream(decodeBuffer))
                                    {
                                        ms2.Position = 4;
                                        int num = ms2.ReadInt();
                                        string msg = ms2.ReadDefaultString(msgLen - 8);
                                        DataProcessing(num, msg);
                                    }
                                    //检查剩余包
                                    int remainLen = (int)m_ReceiveMS.Length - countMsgLen;
                                    if (remainLen > 0)
                                    {
                                        m_ReceiveMS.Position = countMsgLen;
                                        byte[] remainBuffer = new byte[remainLen];
                                        m_ReceiveMS.Position = countMsgLen;
                                        m_ReceiveMS.Read(remainBuffer, 0, remainLen);
                                        //清空数据流
                                        m_ReceiveMS.Position = 0;
                                        m_ReceiveMS.SetLength(0);
                                        //把剩余数据重新写入数据流
                                        m_ReceiveMS.Write(remainBuffer, 0, remainBuffer.Length);
                                        remainBuffer = null;
                                    }
                                    else
                                    {
                                        //刚好一个完整包
                                        //清空数据流
                                        m_ReceiveMS.Position = 0;
                                        m_ReceiveMS.SetLength(0);
                                        break;
                                    }
                                }
                                else
                                {
                                    //没收到完整包
                                    break;
                                }

                            }
                            else
                            {
                                //没收到完整包
                                break;
                            }
                        }
                    }
                    // 进行下一次接收数据包
                    ReceiveMsg();
                }
                else
                {
                    //客户端断开连接
                    Client.ClientMsg.SendMsg(3, JsonConvert.SerializeObject(this.ID));
                    if (Program.frm1.checkBox12.Checked)
                        Program.frm1.SyncContext.Post(Program.frm1.print, string.Format("客户端:{0}断开连接", IP));
                    Program.frm1.SyncContext.Post(Program.frm1.Deluser, this);
                }
            }
            catch (Exception ex)
            {
                //客户端断开连接
                //Client.ClientMsg.SendMsg(3, JsonConvert.SerializeObject(this.NumberID));
                if (Program.frm1.checkBox12.Checked)
                    Program.frm1.SyncContext.Post(Program.frm1.print, string.Format("客户端:{0}断开连接,原因2{1}", IP, ex.Message));//卡客户端的连接就是在这里
                Program.frm1.SyncContext.Post(Program.frm1.Deluser, this);
            }

        }