private void Receive()
        {
            //if handleFlag is true, execute
            if (handleFlag)
            {
                byte[] receiveData = mStateObject.memoryStream.ToArray();
                if (TransferUtil.isServerCall(receiveData[0]))
                {
                    //it is server call
                    ExecuteDelegate executeDelegate = delegate() {
                        handleServerCall(receiveData);
                    };
                    executeDelegate.BeginInvoke(null, null);

                    //ThreadPool.QueueUserWorkItem(handleServerCall, receiveData);
                }
                else
                {
                    //it is server response
                    receiveQueue.Enqueue(receiveData);
                }

                handleFlag          = false;
                firsttime           = true;
                expectReceiveLength = 0;
                receiveLength       = 0;

                //reset memory stream
                mStateObject.memoryStream.Position = 0;
                mStateObject.memoryStream.SetLength(0);
            }
            Socket socket = mStateObject.workSocket;

            socket.BeginReceive(mStateObject.buffer, 0, StateObject.BUFFER_SIZE, SocketFlags.None, new AsyncCallback(ReceiveCallback), mStateObject);
        }