Example #1
0
        private void ReceiveHeadData(IAsyncResult ar)
        {
            try
            {
                NetPackage mPackage = (NetPackage)ar.AsyncState;
                if (clientSocket.Available == 0)
                {
                    Clear();
                    return;
                }

                int len = clientSocket.EndReceive(ar);
                if (len > 0)
                {
                    mPackage.HeadIndex += len;
                    if (mPackage.HeadIndex < mPackage.HeadLength)
                    {
                        clientSocket.BeginReceive(
                            mPackage.HeadBuffer,
                            mPackage.HeadIndex,
                            mPackage.HeadLength - mPackage.HeadIndex,
                            SocketFlags.None,
                            ReceiveHeadData,
                            mPackage);
                    }
                    else
                    {
                        mPackage.InitBodyBuffer();
                        clientSocket.BeginReceive(mPackage.BodyBuffer,
                                                  0,
                                                  mPackage.BodyLength,
                                                  SocketFlags.None,
                                                  ReceiveBodyData,
                                                  mPackage);
                    }
                }
                else
                {
                    Clear();
                }
            }
            catch (Exception e)
            {
                DetailLog.Error("RcvHeadError:" + e.Message);
            }
        }
Example #2
0
        private void ReceiveBodyData(IAsyncResult ar)
        {
            try
            {
                NetPackage mPackage = (NetPackage)ar.AsyncState;
                int        len      = clientSocket.EndReceive(ar);
                if (len > 0)
                {
                    mPackage.BodyIndex += len;
                    if (mPackage.BodyIndex < mPackage.BodyLength)
                    {
                        clientSocket.BeginReceive(mPackage.BodyBuffer,
                                                  mPackage.BodyIndex,
                                                  mPackage.BodyLength - mPackage.BodyIndex,
                                                  SocketFlags.None,
                                                  ReceiveBodyData,
                                                  mPackage);
                    }
                    else
                    {
                        //处理数据
                        T data = NetTool.Deserialize <T>(mPackage.BodyBuffer);
                        OnReceiveData(data);

                        mPackage.RestPackage();
                        clientSocket.BeginReceive(
                            mPackage.HeadBuffer,
                            0,
                            mPackage.HeadLength,
                            SocketFlags.None,
                            ReceiveHeadData,
                            mPackage);
                    }
                }
                else
                {
                    Clear();
                }
            }
            catch (Exception e)
            {
                DetailLog.Error("RcvBodyError:" + e.Message);
            }
        }
Example #3
0
        public void ReceiveData(Socket socket, Action closeCB)
        {
            OnConnected();
            try
            {
                clientSocket  = socket;
                closeCallBack = closeCB;
                NetPackage mPackage = new NetPackage();

                this.clientSocket.BeginReceive(
                    mPackage.HeadBuffer,
                    0,
                    mPackage.HeadLength,
                    SocketFlags.None,
                    new AsyncCallback(ReceiveHeadData),
                    mPackage);
            }
            catch (Exception e)
            {
                DetailLog.Error("StartRcvData:" + e.Message);
            }
        }