2014-01-25 57 views
-4

我有一個程序,可以ping通並獲取局域網中所有活動的ip地址,我用csharp控制檯模式對其進行編碼問題是,當我將它放在模式窗體中時,Spinwatch出現錯誤和一錯誤消息框出現獲取局域網上的所有IP地址

這裏低於

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.NetworkInformation; 
using System.Threading; 

namespace pingagediffusiontest 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 



     private void button1_Click(object sender, EventArgs e) 
     { } 
     private static List<Ping> pingers = new List<Ping>(); 
     private static int instances = 0; 

    private static object @lock = new object(); 

    private static int result = 0; 
    private static int timeOut = 250; 

    private static int ttl = 5; 

    static void Mains() 
    { 
    string baseIP = "192.168.1."; 

    Console.WriteLine("Pinging 255 destinations of D-class in {0}*", baseIP); 

    CreatePingers(255); 


     PingOptions po = new PingOptions(ttl, true); 
     System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); 
     byte[] data= enc.GetBytes("abababababababababababababababab"); 

     SpinWait wait = new SpinWait(); 
     int cnt = 1; 

     Stopwatch watch = Stopwatch.StartNew(); 

     foreach (Ping p in pingers) { 
      lock (@lock) { 
      instances += 1; 
      } 

      p.SendAsync(string.Concat(baseIP, cnt.ToString()), timeOut, data, po); 
      cnt += 1; 
     } 

     while (instances > 0) { 
      wait.SpinOnce(); 
     } 

     watch.Stop(); 

    DestroyPingers(); 
Console.WriteLine("Finished in {0}. Found {1} active IP-addresses.",  watch.Elapsed.ToString(), result); 
     Console.ReadKey(); 

    } 

    public static void Ping_completed(object s, PingCompletedEventArgs e) 
    { 
     lock (@lock) { 
      instances -= 1; 
     } 

     if (e.Reply.Status == IPStatus.Success) { 
      Console.WriteLine(string.Concat("Active IP: ", e.Reply.Address.ToString())); 
      result += 1; 
     } else { 
      Console.WriteLine(String.Concat("Non-active IP: ", e.Reply.Address.ToString())) 
     } 
    } 


    private static void CreatePingers(int cnt) 
    { 
     for (int i = 1; i <= cnt; i++) { 
      Ping p = new Ping(); 
      p.PingCompleted += Ping_completed; 
      pingers.Add(p); 
     } 
    } 

    private static void DestroyPingers() 
    { 
     foreach (Ping p in pingers) { 
      p.PingCompleted -= Ping_completed; 
      p.Dispose(); 
     } 

     pingers.Clear(); 

    } 
    } 

} 

錯誤1類型或命名空間名稱的代碼和錯誤「SpinWait」找不到 錯誤3的類型或命名空間名稱秒錶'能未找到 錯誤4名稱「秒錶」在當前上下文中不存在

+1

添加一個分號(';')到Console.WriteLine(String.Concat(「Non-active IP:」))行的末尾,並在頂部添加一個'使用System.Diagnostics;',因爲它是'Stopwatch'的名字空間。您可以通過懸停錯誤的行,點擊小箭頭並查看建議來看到此情況。 – CodeCaster

回答

0

只需添加

using System.Diagnostics; 

在你的文件的頂部。

0

錯誤3類型或命名空間名稱「秒錶」找不到

您需要導入下面的命名空間在程序中使用StopWatch

using System.Diagnostics; 

通過@CodeCaster的建議在評論中 - 您缺少semicolon來終止Console.WriteLine()聲明:

Console.WriteLine(String.Concat("Non-active IP: ", e.Reply.Address.ToString())) //missing semicolon 

建議:正如你說你轉換的代碼從控制檯應用程序到Windows窗體應用程序這將是很好,如果你可以改變/與MessageBox.Show()替換所有Console.WriteLine()報表如下圖所示:

MessageBox.Show(String.Concat("Non-active IP: ", e.Reply.Address.ToString())); 
相關問題