我想编个局域网聊天什么的小程序  所以我想获得在这个局域网中的所有主机的名字从而获得他的IP  请问大家怎么获得  局域网的IP的 我在网上看的 都编译不通过  我没学过C#  所以请大家最好能写个能编译的代码 最后有注释 我在这里谢谢大家了  把分都拿出来了  好吧 亲~~~

解决方案 »

  1.   

    网上不是有很多么
    http://blog.sina.com.cn/s/blog_43a75dfc0100mmri.html
      

  2.   


            /// <summary>
            /// 获得局域网内ip
            /// </summary>
            /// <returns></returns>
            public static ArrayList GetAllLocalMachines()
            {
                Process p = new Process();
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.Start(); p.StandardInput.WriteLine("arp -a");
                p.StandardInput.WriteLine("exit");
                ArrayList list = new ArrayList();
                StreamReader reader = p.StandardOutput;
                string IPHead = Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString().Substring(0, 3);
                for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
                {
                    line = line.Trim(); if (line.StartsWith(IPHead) && (line.IndexOf("dynamic") != -1))
                    {
                        string IP = line.Substring(0, 15).Trim(); string Mac = line.Substring(line.IndexOf("-") - 2, 0x11).Trim();
                        list.Add(IP);
                    }
                }
                return list;
            }//调用ArrayList arr = GetAllLocalMachines();
      

  3.   

    这段代码   我测试通过了啊   你是不是没有添加引用啊
    在最上面加以下引用
    using System.Diagnostics;
    using System.Collections;
    using System.IO;
    using System.Net;
      

  4.   

    编译不过去,报的什么错?
    没有添加引用吧?
    using System.Diagnostics;
    using System.IO;
      

  5.   

    编译的过去。。直接把他  复制到  复制到 C# 就能编???  能不能 加我个QQ  给我 讲完 这个 就删 都行  1073889058
      

  6.   

    新建一个“控制台应用程序”项目,把下面的代码原样复制到Program.cs中,按Ctrl+F5运行using System;
    using System.Collections;
    using System.Diagnostics;
    using System.IO;
    using System.Net;class Program
    {
    static void Main(string[] args)
    {
    ArrayList arr = GetAllLocalMachines();
    foreach (string s in arr)
    Console.WriteLine(s);
    } /// <summary>
    /// 获得局域网内ip
    /// </summary>
    /// <returns></returns>
    public static ArrayList GetAllLocalMachines()
    {
    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.CreateNoWindow = true;
    p.Start();
    p.StandardInput.WriteLine("arp -a");
    p.StandardInput.WriteLine("exit");
    ArrayList list = new ArrayList();
    StreamReader reader = p.StandardOutput;
    string IPHead = Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString().Substring(0, 3);
    for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
    {
    line = line.Trim();
    if (line.StartsWith(IPHead))
    {
    string IP = line.Substring(0, 15).Trim(); string Mac = line.Substring(line.IndexOf("-") - 2, 0x11).Trim();
    list.Add(IP);
    }
    }
    return list;
    }
    }
      

  7.   

    就这么几行程序还要什么注释。原理就是用Process类调用arp命令,在它的输出流中截取192打头的文字,就是局域网地址,你可以在命令窗口下打“arp -a”看下就知道了。
      

  8.   

    我 对于C# 不是很懂~~ 所以 。嘿嘿 我 得到的list的  不是Ip  而是 主机名  该怎么办???
      

  9.   

    而且  这样获得和我直接在DOC中输入arp -a  不一样  PS  我在宿舍的路由器中   哥哥 姐姐  弟弟妹妹 给点力 ~~
      

  10.   

    我不知道 为什么   上述的代码   只打出了 动态的 IP(也就是 只显示除了  上网的IP)而那些 静态的IP没有显示 而 arp -a 都显示