Java 获取网络计算机名

Java 获取网络计算机名,java,Java,我正在寻找一种更好的方法,用Java在我的局域网中获取计算机名。我试过: 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); Stri

我正在寻找一种更好的方法,用Java在我的局域网中获取计算机名。我试过:

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());
        }
    }
byte[]ip={(字节)192,(字节)168,(字节)178,(字节)1};

对于(inti=1;i,可以通过使用多个线程来提高速度


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

对于那些想知道的人,以下是我的想法:

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;
    }
}
导入java.net.InetAddress;
导入java.net.UnknownHostException;
公共类nameLookup实现可运行
{
字节[]ip;
字符串[]名称;
整数指数;
公共名称查找(字节[]ip,整数索引,字符串[]名称)
{
this.ip=ip;
this.names=名称;
这个指数=指数;
}
公开募捐
{
尝试
{
InetAddress addr=InetAddress.getByAddress(ip);
名称[索引]=addr.getHostName();
}
捕获(未知后异常e)
{
System.out.println(e.getMessage());
}
}
公共静态字符串[]查找()
{
字节[]ip={(字节)192,(字节)168,(字节)178,(字节)1};
字符串[]名称=新字符串[254];
线程线程[]=新线程[254];

对于(int i=0;i慢到什么程度?您希望它多快?反向dns天生就慢。并非所有ip都有反向映射,一般来说,如果一个块中的一个ip没有反向映射,那么其余ip也可能没有。线程应该可以大大加快速度,但否则您的性能取决于dns服务r和网络我认为应该有一些技巧或黑客绕过实际攻击每一个可能的IP地址(转到您连接的路由器并检索信息)我在想filechooser对话框,它是如何在网络中获取计算机名的?它非常快。谢谢。我会给你一个提示try@user1380282太好了!很高兴能帮上忙。