public virtual void RecvAsync(AsyncUserToken iAsyncUserToken) { iAsyncUserToken.ActiveDateTime = DateTime.Now; if (iAsyncUserToken.RecvEventArgs.BytesTransferred > 0 && iAsyncUserToken.RecvEventArgs.SocketError == SocketError.Success) { //如果处理数据返回失败,则断开连接 if (!iAsyncUserToken.RecvAsync()) { CloseSocket(iAsyncUserToken); } else { //否则投递下次接收数据请求 // true I/O操作处于挂起状态(会引发SocketAsyncEventArgs.Completed 上的事件e), // false I/O操作同步完成(不会引发会引发SocketAsyncEventArgs.Completed 上的事件e,可能是直接返回操作结果) bool willRaiseEvent = iAsyncUserToken.Socket.ReceiveAsync(iAsyncUserToken.RecvEventArgs); //投递接收请求 if (!willRaiseEvent) { OnRecvAsync(iAsyncUserToken.RecvEventArgs); } } } else { CloseSocket(iAsyncUserToken); } }