private void InsertPackage(AnalyzePackage package) { if (this.InvokeRequired) { try { this.Invoke(new MethodInvoker(() => InsertPackage(package))); } catch (ObjectDisposedException) { } } else { bool showIt = false; if (cbFillter.SelectedIndex == 0 && cbProtocol.SelectedIndex == 0) { showIt = true; } else if (cbFillter.SelectedIndex != 0 && cbProtocol.SelectedIndex == 0 && (package.SrcIP.ToString().Equals(cbFillter.Text) || package.DesIP.ToString().Equals(cbFillter.Text))) { showIt = true; } else if (cbFillter.SelectedIndex == 0 && cbProtocol.SelectedIndex != 0 && package.Protocol.ToString().Equals(cbProtocol.Text)) { showIt = true; } else if (cbFillter.SelectedIndex != 0 && cbProtocol.SelectedIndex != 0 && (package.SrcIP.ToString().Equals(cbFillter.Text) || package.DesIP.ToString().Equals(cbFillter.Text)) && package.Protocol.ToString().Equals(cbProtocol.Text)) { showIt = true; } if (showIt) { ListViewItem lvi = new ListViewItem((sw.ElapsedMilliseconds / 1000F).ToString()); lvi.SubItems.Add(package.SrcIP.ToString()); lvi.SubItems.Add(package.DesIP.ToString()); lvi.SubItems.Add(package.Protocol.ToString()); lvi.SubItems.Add("0"); lvSkt.Items.Insert(0, lvi); } if (!cbFillter.Items.Contains(package.SrcIP.ToString())) { cbFillter.Items.Add(package.SrcIP.ToString()); } else if (!cbFillter.Items.Contains(package.DesIP.ToString())) { cbFillter.Items.Add(package.DesIP.ToString()); } if (!cbProtocol.Items.Contains(package.Protocol.ToString())) { cbProtocol.Items.Add(package.Protocol.ToString()); } if (lvSkt.Items.Count >= 100) { lvSkt.Items.RemoveAt(lvSkt.Items.Count - 1); } Application.DoEvents(); } }
/// <summary>自緩緩衝暫存區中取得已拆解完畢的封包資料。</summary> /// <returns>已拆解完畢的封包資料。</returns> public AnalyzePackage GetPackage() { _mGetPackage = null; lock (_qPackage) { if (_qPackage.Count != 0) { _mGetPackage = _qPackage.Dequeue(); } } return(_mGetPackage); }
/// <summary>接收到封包資料。</summary> /// <param name="SyncData">非同步接收的資料。</param> private void OnReceive(IAsyncResult SyncData) { // get data length int iRecvLen_ = _mSocket.EndReceive(SyncData); _mPackage = new AnalyzePackage(_byBuff, iRecvLen_); lock (_qPackage) { _qPackage.Enqueue(_mPackage); } this.BeginReceive(); }
private void MonitorTask() { AnalyzePackage ap = null; while (!_Exit) { if (_Svr.PackageCount == 0) { continue; } while (!_Exit && _Svr.PackageCount != 0) { ap = _Svr.GetPackage(); InsertPackage(ap); Thread.Sleep(20); } } }