예제 #1
0
        /// <summary>
        /// 处理发送数据
        /// </summary>
        /// <param name="sendSocketAsyncEventArgs"></param>
        private void ProcessSend(SocketAsyncEventArgs sendSocketAsyncEventArgs)
        {
            if (sendSocketAsyncEventArgs.SocketError == SocketError.Success)
            {
                DataHolder dataHolder = sendSocketAsyncEventArgs.UserToken as DataHolder;
                switch (dataHolder.SendStatus)
                {
                case SocketProcessStatus.UnComplete:
                    StartSend(sendSocketAsyncEventArgs);
                    break;

                case SocketProcessStatus.Completed:
                    CloseClientSocket(sendSocketAsyncEventArgs);
                    break;
                }
            }
            else
            {
                CloseClientSocket(sendSocketAsyncEventArgs);
            }
        }
예제 #2
0
        /// <summary>
        /// 处理接收数据
        /// </summary>
        /// <param name="receiveSocketAsyncEventArgs"></param>
        private void ProcessReceive(SocketAsyncEventArgs receiveSocketAsyncEventArgs)
        {
            if (receiveSocketAsyncEventArgs.SocketError == SocketError.Success && receiveSocketAsyncEventArgs.BytesTransferred > 0)
            {
                DataHolder dataHolder = receiveSocketAsyncEventArgs.UserToken as DataHolder;

                SocketProcessStatus socketProcessStatus = dataHolder.Receive(receiveSocketAsyncEventArgs);
                switch (socketProcessStatus)
                {
                case SocketProcessStatus.UnComplete:
                    StartReceive(receiveSocketAsyncEventArgs);
                    break;

                case SocketProcessStatus.Completed:
                    if (dataHolder.HandleMessage())
                    {
                        //处理数据成功
                        StartSend(receiveSocketAsyncEventArgs);
                    }
                    else
                    {
                        //处理数据异常
                        CloseClientSocket(receiveSocketAsyncEventArgs);
                    }
                    break;

                case SocketProcessStatus.Exception:
                    CloseClientSocket(receiveSocketAsyncEventArgs);
                    break;
                }
            }
            else
            {
                CloseClientSocket(receiveSocketAsyncEventArgs);
            }
        }