public override void channelRead(HandlerContext ctx, object msg) { try { var ip = (ctx.Socket.RemoteEndPoint as IPEndPoint); var key = ip.Address.ToString() + ip.Port; Packet packet = (Packet)msg; var segment = packet.Segment; //处理分包 if (segment.Divide) { segmentCache.TryAdd(key, new List <Segment>()); segmentCache[key].Add(segment); if (segmentCache[key].Count == segment.PNUM) { List <Segment> segments; if (segmentCache.TryRemove(key, out segments)) { var orderList = segments.OrderBy(o => o.PNO); var data = string.Join("", orderList.Select(o => o.DataSegStr)); DataSegment dataSegment = DataSegment.FromStr(data); segment.DataSegment = dataSegment; Pipeline.Pipe(ctx, packet); } } } else { Pipeline.Pipe(ctx, packet); } }catch (Exception e) { if (Log != null) { Log.Error("SegmentHandle Error:", e); } } }