/// <summary> /// IOCP完成操作时发生 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void readArgs_Completed(object sender, SocketAsyncEventArgs e) { switch (e.LastOperation) { case SocketAsyncOperation.Receive: if (e.SocketError == SocketError.Success) { if (e.BytesTransferred <= 0) { Close(DisconnectType.NetError); return; } byte[] newData = new byte[e.BytesTransferred]; Array.Copy(e.Buffer, e.Offset, newData, 0, e.BytesTransferred); try { dataPacketManager.ReceivedData(newData); } catch (Exception ex) { OnRaiseErrored(new RaiseErrorEvent() { ErrorMessage = ex.Message }); } BeginReceive(e); } else { Close(DisconnectType.Disconnect); } break; case SocketAsyncOperation.Send: if (e.SocketError != SocketError.Success) { sendQueue.Enqueue(e.Buffer); //e.Buffer; Close(DisconnectType.NetError); } else { StartSend(); } break; default: OnRaiseErrored(new RaiseErrorEvent() { ErrorMessage = "读写错误" }); break; } }