2015-06-19 33 views
2

我知道这个问题已经被问这里,但没有得到回答的设备的名称和IP。获取Wi-Fi网络

我写在我要显示的名称和每个IP地址和每一个连接到我的无线网络设备,一个简单的Java Swing应用程序。

我想表明这个名单中JFrame。我在网上搜索了很多,但无法找到实现此目的的方法。请帮我拿出Java大师!

在此先感谢!

+2

*“我知道这个问题已经被要求在这里,但它没有得到答案。“*有什么问题?提供一个链接。它可能没有被回答,只是因为没有答案,再次询问不会改变这一点。 –

回答

1

我发现找一点点这个代码后。它可以工作,但速度很慢,可能不是最好的方式,但它起作用。

import java.io.IOException; 
import java.net.InetAddress; 

public class NetworkPing { 

    /** 
    * JavaProgrammingForums.com 
    */ 
    public static void main(String[] args) throws IOException { 

     InetAddress localhost = InetAddress.getLocalHost(); 
     // this code assumes IPv4 is used 
     byte[] ip = localhost.getAddress(); 

     for (int i = 1; i <= 254; i++) 
     { 
      ip[3] = (byte)i; 
      InetAddress address = InetAddress.getByAddress(ip); 
     if (address.isReachable(1000)) 
     { 
      System.out.println(address + " machine is turned on and can be pinged"); 
     } 
     else if (!address.getHostAddress().equals(address.getHostName())) 
     { 
      System.out.println(address + " machine is known in a DNS lookup"); 
     } 
     else 
     { 
      System.out.println(address + " the host address and host name are equal, meaning the host name could not be resolved"); 
     } 
     } 

    } 
} 

几件事情要注意,address.getHostAddress()返回192.168.0.xxx 和address.getHostName()返回该设备的名称,比如 “Kevins-PC”

这是一个相当简单的一段代码,但我会快速浏览它。

它通过获取本地主机IP地址(在普通家庭网络上的IP地址为192.168.0.xxx)开始,并将其存储在byte []中,使其看起来像{192,168,0,xxx }。 然后创建一个循环从1开始要254(因为这个代码假定一个/ 24子网掩码(255.255.255.0),但如果它的运行不同的子网掩码,那么它可能不是1-254)。 然后在for循环中,它将ip的第三个索引设置为i。 然后它从该地址创建一个InetAddress。 ,然后尝试在1000毫秒(1秒),以达到它,并且如果成功则它打印地址和表示其到达。 否则,如果机主机地址(192.168.0.xxx)不等于主机名(比如你的电脑像Kevins-PC的名称),然后它说,机器在DNS查找这意味着它称为被发现在DNS查找中,但它不可访问(所以它可能关闭或没有连接,但它已经在以前),DNS是域名服务。 DNS基本上存储信息(您的路由器可能会这样做)。 最后,否则它只是说,它无法得到解决,这意味着它不是可达也不是发现看在DNS。

我发现这个代码herehere

UPDATE

所以,如果你运行这个,你只是不断收到类似“192.168.0.5/192.168.0.5主机地址和主机名是平等的,这意味着该主机名称无法解析” 这意味着你的路由器(您的本地DNS)只是不存储信息,或者这些设备只是选择不提交他们的主机名到路由器上,这就是为什么你会不断得到那个消息。据我所知,没有办法解决,因为这些设备名称字面上没有存储

+0

谢谢你的帮助!我检查了它。它显示IP地址,但它不显示连接设备的名称。 'address.getHostName()'再次向我显示IP地址。我如何获取连接设备的名称? –

+0

尝试再次运行它,我无法给出它为什么会起作用的原因,但它通常第二次运行 – MrWayFarOut

0

试试这个:)

import java.io.IOException; 
import java.net.*; 
import java.util.Vector; 

public class search { 
    public static void main(String args[]) throws UnknownHostException{ 

     Vector<String> Available_Devices=new Vector<>(); 
     String myip=InetAddress.getLocalHost().getHostAddress(); 
     String mynetworkips=new String(); 

     for(int i=myip.length();i>0;--i) { 
      if(myip.charAt(i-1)=='.'){ mynetworkips=myip.substring(0,i); break; } 
     } 

     System.out.println("My Device IP: " + myip+"\n"); 

     System.out.println("Search log:"); 
     for(int i=1;i<=254;++i){ 
      try { 
       InetAddress addr=InetAddress.getByName(mynetworkips + new Integer(i).toString()); 
       if (addr.isReachable(1000)){ 
        System.out.println("Available: " + addr.getHostAddress()); 
        Available_Devices.add(addr.getHostAddress()); 
       } 
       else System.out.println("Not available: "+ addr.getHostAddress()); 

      }catch (IOException ioex){} 
     } 

     System.out.println("\nAll Connected devices(" + Available_Devices.size() +"):"); 
     for(int i=0;i<Available_Devices.size();++i) System.out.println(Available_Devices.get(i)); 
    } 
}