private void OnReceive(IAsyncResult iar) { StateObj state = (StateObj)iar.AsyncState; //读取的消息总长度 int len = state.Client.EndReceive(iar); if (len < 4) { UITools.logError("invaild msg"); state.OnRecvError(state); return; } byte[] buff = state.RecvTempBuff; int msgRealLen = MsgUtils.DecodeMsgRealLen(buff, 0, 4); UITools.log("msg real length : " + msgRealLen); state.RecvLen = msgRealLen; // state.RecvBuff.addRange<byte>(buff, AppConst.MsgHeadLen, len - 4); state.RecvBuff.Write(buff, AppConst.MsgHeadLen, len - AppConst.MsgHeadLen); if (state.RecvLen - state.RecvBuff.Length > 0) { try { state.Client.BeginReceive(state.RecvTempBuff, 0, state.RecvTempBuff.Length, 0, new AsyncCallback(OnReceiveRestData), state); } catch (Exception) { state.OnRecvError(state); UITools.log("receive data timeout...."); } } else { state.OnReceive(state); } }