using System.Net.Sockets; using System.IO; using System.Net.NetworkInformation; using System.Collections; using System.Net; using System.Threading;//线程可以不用,但为了加快扫描速度,加呗,呵呵 ------>引用 Thread Scan; private void Form1_Load(object sender, EventArgs e) { ScanTarget(); Scan = new Thread(new ThreadStart(this.ScanTarget)); Scan.IsBackground = true; } ArrayList ip = new ArrayList(); private string IP() { try { IPAddress[] arrIPAddresses = Dns.GetHostAddresses(Dns.GetHostName()); foreach (IPAddress ip in arrIPAddresses) { if (ip.AddressFamily.Equals(AddressFamily.InterNetwork)) { return ip.ToString(); } } } catch (Exception) { MessageBox.Show("错误代码:89"); } return "获取错误!"; } private void ScanTarget() { //网上说的方法是这样的``` //string strIPAddress = numericUpDown1.Text + "." + numericUpDown2.Text + "." + numericUpDown3.Text + ".";//但是``这样还是存在很多不确定的因素,如果我临时改IP``那咋办?```所以我把这方法改了 string line1; string ipnet = IP();//先把自己的IP读取下来 string[] str = new string[3]; str = ipnet.Split('.');//把IP用.截成四段 line1 = str[0] + "."+str[1] +"."+ str[2]+".";//把前三段合起来 string strIPAddress =line1;//这就变成了你想要搜索的IP段了````哈哈```不知道这样想会不会出问题的``反正我用没事 int nStart = 0; int nEnd = 255; try { for (int i = nStart; i <= nEnd; i++) { Ping myPing = new Ping();//利用ping类 myPing.PingCompleted += new PingCompletedEventHandler(_myPing_PingCompleted);//为类添加完成时的响应函数 string strScanIPAdd = strIPAddress + i.ToString(); myPing.SendAsync(strScanIPAdd, 1000, null); } } catch { MessageBox.Show("没有用户在线!"); } } private void _myPing_PingCompleted(object sender, PingCompletedEventArgs e) { if (e.Reply.Status == IPStatus.Success) { if (!ip.Contains(e.Reply.Address.ToString().Trim())) ip.Add(e.Reply.Address.ToString().Trim());//大概是把在线的IP用ip数组记录下来吧 } } private void redata_Click(object sender, EventArgs e)//刷新按钮,作用是重新读取扫描出来的在线IP { int i = 0;//记录人数用的 label7.Text = "在线人数:"; listBox1.Items.Clear(); foreach (string st1 in ip) { listBox1.Items.Add(st1); i++;//读到就加呗 } label7.Text = label7.Text+i.ToString();//在线人数就完成了 } name:5+x