Java 如何确保我的windows系统已连接到网络
我正在创建一个实用程序,其中还包含连接到我的网络的几个ip地址的列表 我需要创建一个模块,不断刷新该列表,以便该列表中只存在活动IP。 我曾想过通过在每个IP上使用PING并删除无响应的IP来实现这一点 问题是,当我的系统本身未连接到网络时,我不想删除IP,因为在这种情况下,由于明显的原因,所有IP都将被删除 如何确保我的系统已连接到某个网络? 我正在使用Java。 我试过看其他问题,但找不到任何相关的问题 [第1版] IP列表是手动添加的,服务器上还有几个我不需要关心的IP。所以我不能按照下面@Hoijf的建议在整个服务器上查找。此外,IP的变化是一致的,这就是为什么我需要不断更新我的列表,以便我们可以替换无响应的服务器/IPJava 如何确保我的windows系统已连接到网络,java,windows,networking,network-programming,ping,Java,Windows,Networking,Network Programming,Ping,我正在创建一个实用程序,其中还包含连接到我的网络的几个ip地址的列表 我需要创建一个模块,不断刷新该列表,以便该列表中只存在活动IP。 我曾想过通过在每个IP上使用PING并删除无响应的IP来实现这一点 问题是,当我的系统本身未连接到网络时,我不想删除IP,因为在这种情况下,由于明显的原因,所有IP都将被删除 如何确保我的系统已连接到某个网络? 我正在使用Java。 我试过看其他问题,但找不到任何相关的问题 [第1版] IP列表是手动添加的,服务器上还有几个我不需要关心的IP。所以我不能按照下面
public class temp
{
static ArrayList<InetAddress> history = new ArrayList<InetAddress>();
static Timer timer;
static InetAddress add;
public static void main(String[] args)
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int timeout = 25;
timer = new Timer(1000, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
for(InetAddress ii : history)
{
try
{
System.out.println(ii+" >> "+ii.isReachable(timeout));
} catch (IOException e1){System.out.println(ii+" >> Failed");}
}
}
});
Thread t = new Thread(new Runnable()
{
@Override
public void run()
{
while(true)
{
try
{
history.add(InetAddress.getByName(br.readLine()));
} catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
t.start();
timer.start();
}
公共类临时
{
静态ArrayList历史记录=新建ArrayList();
静态定时器;
静态地址添加;
公共静态void main(字符串[]args)
{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
int超时=25;
计时器=新计时器(1000,新ActionListener()
{
@凌驾
已执行的公共无效操作(操作事件e)
{
(地址二:历史)
{
尝试
{
System.out.println(ii+“>>”+ii.isReachable(超时));
}catch(IOException e1){System.out.println(ii+“>>失败”);}
}
}
});
线程t=新线程(新的可运行线程()
{
@凌驾
公开募捐
{
while(true)
{
尝试
{
add(InetAddress.getByName(br.readLine());
}捕获(未知后异常e)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
});
t、 start();
timer.start();
}
}因此,您应该在程序中创建一个策略来ping此引用主机,以检查是否应从活动列表中删除该主机。谢谢您的回复。问题是,如果连接,我的网络将有1000多个系统,我只需要关心最初手动添加到列表中的现有IP。这是因为我们一次只能使用特定的IP(虚拟服务器的IP),而这些虚拟服务器通常会被删除。这是一个荒谬的安排,但很适合我们组织的某些特定要求。我的问题可能不太清楚,需要更新。好的,然后有一个ip的用户输入方法。然后,您可以将IP保存在文件中,并在以后需要时重新加载它。扫描网络是没有必要的,原则是一样的。#hoijf你所建议的一切都是正确的,只是不适合我的特定用例。不管怎样,正如@sanjayk79所建议的那样,我似乎需要找出一些保证始终处于运行状态的IP,这仍然是一个危险的情况,因为我们的网络是动态的。在JDK中查看是否有API来枚举所有本地网络接口或IP地址。它们存在于操作系统端,但我不了解Java。如果它们存在,请查看机器是否仍分配了预期的IP地址,以及适配器的状态是否仍处于启动状态。另一种方法是通过命令行工具之一查询信息。在windows上,例如
ipconfig
。您可以将其作为子流程启动。分析相关信息,查看您的网络适配器是否仍处于连接状态,以及是否分配了IP地址。然而,这可能比直接的Java/OSAPI开销更大。网络隔离问题似乎是这个场景的合法术语。我必须找出一些有保证的IP,并将其用作参考。