/// <summary> /// 这里是接收到包里面的数据异步处理 /// </summary> /// <param name="ar"></param> protected void ReciveData(IAsyncResult ar) { try { //结束接收获取长度 int len = mSocket.EndReceive(ar); if (len > 0) { mKGNetPacket.PacketIndex += len; //这里是如果接收到的包长和原本获取到的长度小,就是分包了 需要再次进行接收剩下的 if (mKGNetPacket.PacketIndex < mKGNetPacket.PacketBuffLength) { mSocket.BeginReceive(mKGNetPacket.PacketBuff, mKGNetPacket.PacketIndex, mKGNetPacket.PacketBuffLength - mKGNetPacket.PacketIndex, SocketFlags.None, ReciveData, null); } //已经接完一组数据了 else { //这里就可以进行回调函数了 OnReciveData(mKGNetPacket.PacketBuff.DeSerialization <T>()); OnReciveDataEvent?.Invoke(mKGNetPacket.PacketBuff.DeSerialization <T>()); //开始新一轮的从上往下接收了 mKGNetPacket.Refresh(); mKGNetPacket.PacketBuff = new byte[4]; mSocket.BeginReceive(mKGNetPacket.PacketBuff, 0, 4, SocketFlags.None, ReciveHeadData, null); } } else { Clear(); } } catch (Exception e) { ("ReciveDataError:" + e).KLog(LogLevel.Err); } }
protected virtual void OnReciveData(T data) { OnReciveDataEvent?.Invoke(data); ("接收到了一条消息:" + data).KLog(); }