/// <summary> /// 接收确认包 /// </summary> /// <param name="package"></param> public void AddAck(ACKPackage package) { var seqPack = SendBuffer.Find(x => x.PackSeq == package.PackSeq); if (seqPack != null) { SendBuffer.Remove(seqPack); QueuePool.Roll(seqPack.Data);//回收数据 } }
private void SendAck() { Task.Factory.StartNew(() => { for (int i = 0; i < Len; i++) { if (!lstSeq.Contains(i)) { ACKPackage package = new ACKPackage(); package.PackID = this.PackID; package.PackSeq = i; Stream.Write(DestHost, DestPort, package.GetBuffer()); } } }); }
/// <summary> /// 从接收session接收数据 /// </summary> /// <param name="sender"></param> /// <param name="data"></param> /// <param name="host"></param> private void Stream_DataCall(object sender, byte[] data, HostAndPort host) { //创建类型 BasePackage package = new BasePackage(data); //所有接收信息都经过 switch (package.PackType) { case PackageControl.Data: package = new DATAPackage(data); break; case PackageControl.Ack: package = new ACKPackage(data); break; case PackageControl.Fin: package = new FINPackage(data); break; case PackageControl.Lost: package = new LostPackage(data); break; case PackageControl.ShutDown: package = new ShutDownPackage(data); break; case PackageControl.Syn: package = new SYNPackage(data); break; } package.DestHost = host.Host; package.DestPort = host.Port; AddPackage(host, package); }