我知道这个问题已经被问这里,但没有得到回答的设备的名称和IP。获取Wi-Fi网络
我写在我要显示的名称和每个IP地址和每一个连接到我的无线网络设备,一个简单的Java Swing应用程序。
我想表明这个名单中JFrame
。我在网上搜索了很多,但无法找到实现此目的的方法。请帮我拿出Java大师!
在此先感谢!
我知道这个问题已经被问这里,但没有得到回答的设备的名称和IP。获取Wi-Fi网络
我写在我要显示的名称和每个IP地址和每一个连接到我的无线网络设备,一个简单的Java Swing应用程序。
我想表明这个名单中JFrame
。我在网上搜索了很多,但无法找到实现此目的的方法。请帮我拿出Java大师!
在此先感谢!
我发现找一点点这个代码后。它可以工作,但速度很慢,可能不是最好的方式,但它起作用。
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。
UPDATE
所以,如果你运行这个,你只是不断收到类似“192.168.0.5/192.168.0.5主机地址和主机名是平等的,这意味着该主机名称无法解析” 这意味着你的路由器(您的本地DNS)只是不存储信息,或者这些设备只是选择不提交他们的主机名到路由器上,这就是为什么你会不断得到那个消息。据我所知,没有办法解决,因为这些设备名称字面上没有存储
谢谢你的帮助!我检查了它。它显示IP地址,但它不显示连接设备的名称。 'address.getHostName()'再次向我显示IP地址。我如何获取连接设备的名称? –
尝试再次运行它,我无法给出它为什么会起作用的原因,但它通常第二次运行 – MrWayFarOut
试试这个:)
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));
}
}
*“我知道这个问题已经被要求在这里,但它没有得到答案。“*有什么问题?提供一个链接。它可能没有被回答,只是因为没有答案,再次询问不会改变这一点。 –