我知道这个问题已在这里被问到,但它没有得到答案。
我正在编写一个简单的Java Swing应用程序,其中我想显示连接到我的无线网络的每个设备的名称和IP地址。
我想在JFrame
中显示此列表。我在网上搜索了很多,但无法找到实现这一目标的方法。请帮助我掌握Java大师!
提前致谢!
答案 0 :(得分: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地址(在普通家庭网络上为192.168.0.xxx)并将其存储在byte []中,使其看起来像{192,168,0,xxx} 。 然后它创建一个从1开始并转到254的for循环(因为此代码假定/ 24子网掩码(255.255.255.0),但如果它运行不同的子网掩码,那么它可能不是1-254)。 然后在for循环中,它将ip的第三个索引设置为i。 然后,它从该地址创建一个InetAddress。 然后它尝试在1000毫秒(1秒)内到达它,如果它成功,那么它打印地址并说它可以到达。 否则,如果机器主机地址(192.168.0.xxx)不等于主机名(如计算机名称,如Kevins-PC),那么它表示该机器在DNS查找中已知,这意味着它在DNS查找,但它无法访问(所以它可能已关闭或未连接,但它已经在以前),DNS是域名服务。 DNS基本上存储信息(您的路由器可能会这样做)。 最后,它只是说它无法解决,这意味着它无法访问,也没有找到在DNS中查找。
<强>更新强>
所以如果你运行这个并且你只是继续得到类似“192.168.0.5/192.168.0.5的东西,主机地址和主机名相等,意味着主机名无法解析” 这意味着您的路由器(您的本地DNS)只是没有存储信息,或者那些设备只是选择不将其主机名提交给路由器,这就是为什么您将不断获取该消息。据我所知,没有办法解决这个问题,因为那些设备名称确实没有存储
答案 1 :(得分: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));
}
}