none
Exception has been thrown by the target of an invocation. RRS feed

  • Вопрос

  • Я написал сниффер, все работает, пакеты ловяться,выводяться в листвью, но через некоторое время (по-разному) появляеться ошибка An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll

    Additional information: Exception has been thrown by the target of an invocation.

    я так понимаю это из за обратного вызова. Если убрать листвью, и оставить только текстбокс то все работает нормально. Подозреваю, что это из за того, что листвью надо где-то хранить свои записи, но всего процесса до конца не понимаю. Подскажите, как решить проблему. Вот код

     

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public delegate void TextEdit();
        public TextEdit TextDelegate;
        static byte[] bytrue = new byte[4] {1, 0, 0, 0};
        static byte[] byout = new byte[4];
        static int i = 0, received;
        static byte[] Databyte = new byte[65536];
        static IPHeader IPh;
        //static ListViewItem[] Pakets = new ListViewItem[1000];
        static Socket Socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
        public Form1()
        {
          InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
          listView1.BeginUpdate();
          listView1.Columns.Add("SourceIPAddress", 100);
          listView1.Columns.Add("DestinationIPAddress", 100);
          listView1.EndUpdate();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
          IPHostEntry HostEnt = Dns.GetHostEntry(Dns.GetHostName());
          IPEndPoint IPoint = new IPEndPoint(HostEnt.AddressList[0], 0);
          Socket1.Bind(IPoint);
          Socket1.IOControl(IOControlCode.ReceiveAll, bytrue, byout);
          Socket1.BeginReceive(Databyte, 0, Databyte.Length, SocketFlags.None, new AsyncCallback(Receive), Databyte);
          
          
          
          
        }
    
        private void Receive(IAsyncResult ar)
        {
         
          received = Socket1.EndReceive(ar);
          IPh = new IPHeader(Databyte, received);
          Socket1.BeginReceive(Databyte, 0, Databyte.Length, SocketFlags.None, new AsyncCallback(Receive), Databyte);
          i++;
          TextDelegate = new TextEdit(TextEditMethod);
          IAsyncResult AsResInvoke = this.BeginInvoke(this.TextDelegate);
          this.EndInvoke(AsResInvoke);
    
        }
    
        public void TextEditMethod()
      {
        listView1.BeginUpdate();
        ListViewItem Paket = new ListViewItem(Convert.ToString((IPAddress.Parse(Convert.ToString(IPh.uiSourceIPAddress)))));
        Paket.ImageIndex = 0;
        Paket.SubItems.Add(Convert.ToString((IPAddress.Parse(Convert.ToString(IPh.uiDestinationIPAddress)))));
        listView1.Items.Add(Paket);
        textBox1.Text = Convert.ToString(i);
        listView1.EndUpdate();
       
        
        
      }
       
        
    
         private void textBox1_TextChanged(object sender, EventArgs e)
         {
    
         }
    
         private void listView1_SelectedIndexChanged(object sender, EventArgs e)
         {
    
         }
    
         
    
        
        
        
      
    
        
      }
    }
    

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:56 MSDN Forums consolidation (От:Visual C#)
    6 июня 2010 г. 12:38

Ответы

  • Все, я разобрался, проблема оказалась в переводе байт в айпи адреса
    вот
    Paket.SubItems.Add(Convert.ToString((IPAddress.Parse(Convert.ToString(IPh.uiDestinationIPAddress)))));
    и вот
    ListViewItem Paket = new ListViewItem(Convert.ToString((IPAddress.Parse(Convert.ToString(IPh.uiSourceIPAddress)))));
    • Помечено в качестве ответа Fantasista 6 июня 2010 г. 16:22
    6 июня 2010 г. 16:22