/// <summary>
        /// 异步接受服务器端的数据后的后的函数
        /// </summary>
        /// <param name="ar">异步操作状态</param>
        private void ReceiveCallback(IAsyncResult ar)
        {
            // 从输入参数异步state对象中获取state和socket对象
            StateObject state  = (StateObject)ar.AsyncState;
            Socket      client = state.WorkSocket;

            try
            {
                m_mutex.WaitOne();

                //从远程设备读取数据
                int bytes = client.EndReceive(ar);

                if (bytes > 0)
                {
                    // 有数据,存储
                    state.Save(bytes);

                    if (bytes < StateObject.BufferSize ||
                        (state.Buffer[bytes - 1] == StateObject.END[1] && state.Buffer[bytes - 2] == StateObject.END[0]))
                    {
                        //接收完成
                        if (OnReceive != null)
                        {
                            byte[] validData = new byte[state.FullData.Length - 2];
                            Array.Copy(state.FullData, validData, validData.Length);

                            CommEventArgs commArgs = DeserializeObject(validData) as CommEventArgs;
                            state.ClearData();

                            if (commArgs != null)
                            {
                                OnReceive(this, commArgs);
                            }
                        }
                    }// if

                    // 继续读取
                    client.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
                }
                else
                {
                    TriggerConnectedEvent(false);
                    Dispose();
                }
            }
            catch (Exception err)
            {
                TriggerConnectedEvent(false);
                Dispose();
                Console.WriteLine("{0},方法ReceiveCallback,异常:{1}", this.GetType().Name, err.Message);
            }
            finally
            {
                m_mutex.ReleaseMutex();
            }
        }
        /// <summary>
        /// 发送数据到连接好的网络设备
        /// </summary>
        /// <param name="args">要发送的数据</param>
        public void Send(CommEventArgs args)
        {
            try
            {
                if (IsConnection)
                {
                    byte[] buffer = SerializeObject(args);
                    byte[] frame  = new byte[buffer.Length + 2];
                    Array.Copy(buffer, frame, buffer.Length);

                    frame[frame.Length - 2] = StateObject.END[0];
                    frame[frame.Length - 1] = StateObject.END[1];

                    clientSocket.BeginSend(frame, 0, frame.Length, SocketFlags.None, new AsyncCallback(OnSend), null);
                }
            }
            catch (Exception err)
            {
                TriggerConnectedEvent(false);
                Console.WriteLine("{0},方法Send,异常:{1}", this.GetType().Name, err.Message);
            }
        }
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="args">发送内容</param>
        /// <param name="error">出错时返回错误信息,无错时返回null</param>
        /// <returns>成功返回true, 失败返回false</returns>
        public bool Send(CommEventArgs args, out string error)
        {
            try
            {
                if (m_dicClient.ContainsKey(args.Id))
                {
                    byte[] buffer = SerializeObject(args);
                    byte[] frame  = new byte[buffer.Length + 2];
                    Array.Copy(buffer, frame, buffer.Length);

                    frame[frame.Length - 2] = StateObject.END[0];
                    frame[frame.Length - 1] = StateObject.END[1];

                    m_dicClient[args.Id].Send(frame);
                }

                error = null;
                return(true);
            }
            catch (Exception err)
            {
                if (m_dicClient.ContainsKey(args.Id))
                {
                    TriggerConnectedEvent(m_dicClient[args.Id], false);
                }

                error = err.Message;
                //MessageBox.Show(err.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Console.WriteLine("{0},方法Close,异常:{1}", this.GetType().Name, err.Message);

                return(false);
            }
            finally
            {
                m_dicClient.Remove(args.Id);
            }
        }
        /// <summary>
        /// 读取缓冲区数据
        /// </summary>
        /// <param name="ar">socket</param>
        public void ReadCallback(IAsyncResult ar)
        {
            Socket      client = null;
            StateObject state  = null;

            try
            {
                m_mutex.WaitOne();

                state  = ar.AsyncState as StateObject;
                client = state.WorkSocket;

                int bytes = client.EndReceive(ar);

                if (bytes > 0)
                {
                    state.Save(bytes);

                    TriggerConnectedEvent(client, true);


                    if (bytes < StateObject.BufferSize ||
                        (state.Buffer[bytes - 1] == StateObject.END[1] && state.Buffer[bytes - 2] == StateObject.END[0]))
                    {
                        //接收完成
                        if (OnReceive != null)
                        {
                            byte[] validData = new byte[state.FullData.Length - 2];
                            Array.Copy(state.FullData, validData, validData.Length);

                            CommEventArgs commArgs = DeserializeObject(validData) as CommEventArgs;
                            state.ClearData();

                            if (commArgs != null)
                            {
                                m_dicClient.Add(commArgs.Id, client);
                                OnReceive(this, commArgs);
                            }
                        }
                    }// if

                    client.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0,
                                        new AsyncCallback(ReadCallback), state);
                }
                else
                {
                    TriggerConnectedEvent(client, false);
                }
            }
            catch (SocketException socketError)
            {
                TriggerConnectedEvent(client, false);
                Console.WriteLine("{0},方法ReadCallback,异常:{1} {2}", this.GetType().Name, socketError.ErrorCode, socketError.Message);
            }
            catch (Exception err)
            {
                Console.WriteLine("{0},方法ReadCallback,异常:{1}", this.GetType().Name, err.Message);

                state.ClearData();
                client.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);

                //if (err.Message == "在分析完成之前就遇到流结尾。")
                //{
                //    state.ClearData();
                //    client.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
                //}
                //else
                //{
                //    TriggerConnectedEvent(client, false);
                //    Console.WriteLine("{0},方法ReadCallback,异常:{1}", this.GetType().Name, err.Message);
                //}
            }
            finally
            {
                m_mutex.ReleaseMutex();
            }
        }