获取网络计算机名称

时间:2013-07-31 19:03:05

标签: java

我正在寻找一种更好的方法来使用Java在我的LAN网络中获取计算机名称。我试过了:

byte[] ip = {(byte)192,(byte)168,(byte)178,(byte)1};
    for(int i=1;i<255;i++)
    {
        ip[3] = (byte)i;
        try
        {
            InetAddress addr = InetAddress.getByAddress(ip);
            String s = addr.getHostName();
            System.out.println(s);
        }
        catch(UnknownHostException e)
        {
            System.out.println(e.getMessage());
        }
    }

......但是太慢了。还有其他办法吗?

我在Windows上。

任何想法都表示赞赏。

2 个答案:

答案 0 :(得分:8)

您可以使用多个线程来提高速度。

让每个线程执行'try'块的一次或多次迭代。

答案 1 :(得分:2)

对于那些想知道的人,这就是我想出的:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class nameLookup implements Runnable
{
    byte[] ip;
    String[] names;
    int index;
    public nameLookup(byte[] ip,int index,String[] names)
    {
        this.ip = ip;
        this.names = names;
        this.index = index;
    }
    public void run()
    {
        try
        {
            InetAddress addr = InetAddress.getByAddress(ip);
            names[index]= addr.getHostName();

        }
        catch(UnknownHostException e)
        {
            System.out.println(e.getMessage());
        }
    }
    public static String[] lookUp()
    {
        byte[] ip = {(byte)192,(byte)168,(byte)178,(byte)1};
        String[] names = new String[254];
        Thread threads[] = new Thread[254];

        for(int i=0;i<254;i++)
        {
            ip[3] = (byte)(i+1);
            threads[i] = new Thread(new nameLookup(ip,i,names));
            threads[i].start();
        }
        for(int i=0;i<254;i++)
        {
            try
            {
                threads[i].join();
            }
            catch (InterruptedException e) {
                System.out.print(e.getMessage());
            }

        }
        return names;
    }
}

我仍然希望它更快,但现在它至少是可以接受的。