protected override void OnIPNotify(IPNotifyItem stat)
 {
     if (PackageDirect.IN == stat.m_direct)
     {
         Console.WriteLine(
             "接受数据\t源地址:{0}\t\t目的地址:{1}\t\t包大小:{2}",
             stat.SourceIP, stat.DestIP, stat.m_len);
     }
     else
     {
         Console.WriteLine(
             "发送数据\t源地址:{0}\t\t目的地址:{1}\t\t包大小:{2}",
             stat.SourceIP, stat.DestIP, stat.m_len);
     }
 }
 protected override void OnIPNotify(IPNotifyItem stat)
 {
     m_ColorConsole.TextColor(Color.Red);
     if (PackageDirect.IN == stat.Director)
     {
         Console.WriteLine(
             "接受数据\t源地址:{0}\t\t目的地址:{1}\t\t包大小:{2}",
             stat.SourceIP, stat.DestIP, stat.Length);
     }
     else
     {
         m_ColorConsole.TextColor(Color.Green);
         Console.WriteLine(
             "发送数据\t源地址:{0}\t\t目的地址:{1}\t\t包大小:{2}",
             stat.SourceIP, stat.DestIP, stat.Length);
     }
 }
        void DoAnalyze(List<SocketPacket> packages, int ticklen)
        {
            NetSpeed speed = new NetSpeed();

            foreach (SocketPacket p in packages)
            {
                IPNotifyItem stat = new IPNotifyItem();
                stat.SourceIP = p.SourceAddress;
                stat.DestIP = p.DestinationAddress;
                stat.Length = p.TotalLength;
                stat.ProtocolType = p.ProtocolType;
                stat.MessageLength = p.MessageLength;
                stat.SourcePort = p.SourcePort;
                stat.DestPort = p.DestinationPort;

                if (IPAddress.Equals(p.SourceAddress, m_localbindaddress))
                {//Send  
                    speed.nUpTotalLen += p.TotalLength;
                    speed.nUppackageCnt += 1;
                    switch (p.ProtocolType)
                    {
                        case Protocol.TCP:
                            speed.nUpTCPTotalLen += p.TotalLength;
                            speed.nUpTCPpackageCnt += 1;
                            break;
                        case Protocol.UDP:
                            speed.nUpUDPTotalLen += p.TotalLength;
                            speed.nUpUDPpackageCnt += 1;
                            break;
                        case Protocol.ICMP:
                            speed.nUpICMPTotalLen += p.TotalLength;
                            speed.nUpICMPpackageCnt += 1;
                            break;
                        case Protocol.IGMP:
                            speed.nUpIGMPTotalLen += p.TotalLength;
                            speed.nUpIGMPpackageCnt += 1;
                            break;
                    }

                    stat.Director = PackageDirect.OUT;

                    if (m_ipnotify != null)
                        m_ipnotify.Invoke(stat);
                }
                else
                {//Receive  
                    speed.nDownTotalLen += p.TotalLength;
                    speed.nDownpackageCnt += 1;
                    switch (p.ProtocolType)
                    {
                        case Protocol.TCP:
                            speed.nDownTCPTotalLen += p.TotalLength;
                            speed.nDownTCPpackageCnt += 1;
                            break;
                        case Protocol.UDP:
                            speed.nDownUDPTotalLen += p.TotalLength;
                            speed.nDownUDPpackageCnt += 1;
                            break;
                        case Protocol.ICMP:
                            speed.nDownICMPTotalLen += p.TotalLength;
                            speed.nDownICMPpackageCnt += 1;
                            break;
                        case Protocol.IGMP:
                            speed.nDownIGMPTotalLen += p.TotalLength;
                            speed.nDownIGMPpackageCnt += 1;
                            break;
                    }

                    stat.Director = PackageDirect.IN;

                    if (m_ipnotify != null)
                        m_ipnotify.Invoke(stat);
                }
            }

            speed.CaculateSpeed(ticklen);
            if (m_speednotify != null)
                m_speednotify.Invoke(speed);
        }