private void ReceiveHeadData(IAsyncResult ar) { try { NetPackage mPackage = (NetPackage)ar.AsyncState; if (clientSocket.Available == 0) { Clear(); return; } int len = clientSocket.EndReceive(ar); if (len > 0) { mPackage.HeadIndex += len; if (mPackage.HeadIndex < mPackage.HeadLength) { clientSocket.BeginReceive( mPackage.HeadBuffer, mPackage.HeadIndex, mPackage.HeadLength - mPackage.HeadIndex, SocketFlags.None, ReceiveHeadData, mPackage); } else { mPackage.InitBodyBuffer(); clientSocket.BeginReceive(mPackage.BodyBuffer, 0, mPackage.BodyLength, SocketFlags.None, ReceiveBodyData, mPackage); } } else { Clear(); } } catch (Exception e) { DetailLog.Error("RcvHeadError:" + e.Message); } }
private void ReceiveBodyData(IAsyncResult ar) { try { NetPackage mPackage = (NetPackage)ar.AsyncState; int len = clientSocket.EndReceive(ar); if (len > 0) { mPackage.BodyIndex += len; if (mPackage.BodyIndex < mPackage.BodyLength) { clientSocket.BeginReceive(mPackage.BodyBuffer, mPackage.BodyIndex, mPackage.BodyLength - mPackage.BodyIndex, SocketFlags.None, ReceiveBodyData, mPackage); } else { //处理数据 T data = NetTool.Deserialize <T>(mPackage.BodyBuffer); OnReceiveData(data); mPackage.RestPackage(); clientSocket.BeginReceive( mPackage.HeadBuffer, 0, mPackage.HeadLength, SocketFlags.None, ReceiveHeadData, mPackage); } } else { Clear(); } } catch (Exception e) { DetailLog.Error("RcvBodyError:" + e.Message); } }
public void ReceiveData(Socket socket, Action closeCB) { OnConnected(); try { clientSocket = socket; closeCallBack = closeCB; NetPackage mPackage = new NetPackage(); this.clientSocket.BeginReceive( mPackage.HeadBuffer, 0, mPackage.HeadLength, SocketFlags.None, new AsyncCallback(ReceiveHeadData), mPackage); } catch (Exception e) { DetailLog.Error("StartRcvData:" + e.Message); } }