【问题标题】:How to make sure that my windows system is connected to network如何确保我的 Windows 系统已连接到网络
【发布时间】:2017-01-05 13:12:17
【问题描述】:

我正在创建一个实用程序,该实用程序还包含连接到我的网络的几个 IP 地址的列表。

我需要创建一个模块来不断刷新该列表,以便该列表中仅存在活动 IP。 我曾想过通过在每个 IP 上使用 PING 并删除无响应的 IP 来实现这一点。

问题是当我的系统本身未连接到网络时,我不想删除 IP,因为在这种情况下,由于显而易见的原因,所有 IP 都将被删除。

如何确定我的系统已连接到某个网络? 我正在使用 Java。 我尝试查看其他问题,但找不到任何相关内容。

[编辑1] IP列表是手动添加的,服务器还有几个我不需要关心的IP。所以我不能按照@Hoijf的建议在整个服务器中进行查找。 IP 也在不断变化,这就是为什么我需要更新我的列表,以便我们可以替换无响应的服务器/IP。

【问题讨论】:

  • 在 JDK 中查看是否有 API 可以枚举所有本地网络接口或 IP 地址。它们存在于操作系统方面,但我不了解 Java。如果它们存在,请查看机器是否仍分配有预期的 IP 地址,并且适配器的状态是否仍为 UP。
  • 另一种方法是通过其中一个命令行工具查询信息。在窗户上,例如ipconfig。您可以将其作为子进程启动。解析相关信息,看看你的网卡是否还在连接,是否分配了IP地址。但是,这可能比直接的 Java/OS API 开销更大。

标签: java windows networking network-programming ping


【解决方案1】:

问题是当我的系统本身是时我不想删除 IP 未连接到网络,因为在这种情况下,所有 IP 都将获得 出于显而易见的原因删除。

这是一个典型的网络隔离问题。您应该考虑您的 LAN 仍处于启动状态(ipconfig 将 NIC 的状态显示为 UP)的情况,但是,您已经失去了 Internet 连接(在某些上游路由器上)。作为一种解决方案,您可以考虑 ping 始终应该启动的参考 IP/主机。 因此,您应该在程序中创建一个策略来 ping 此引用主机,以检查您是否应该从活动列表中删除该主机。

【讨论】:

  • 网络隔离问题似乎是这种情况的合法术语。我必须想出一些有保证的 IP 并将其用作参考。
【解决方案2】:
  1. 扫描网络并保存活动的 IP。
  2. 将 IP 存储在一个数组中并遍历该数组,直到用户选择停止或刷新(返回第 1 步)。
  3. 显示每个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();
    }
    

    }

【讨论】:

  • 感谢您的回复。问题是,如果连接,我的网络将有 1000 多个系统,我只需要关心最初手动添加到列表中的现有 IP。之所以如此,是因为我们一次只能使用特定的 IP(虚拟服务器的 IP),而这些虚拟服务器通常会被删除。这是一个荒谬的安排,但非常适合我们的组织以满足某些特定要求。我的问题可能不清楚这个要求,更新。
  • 好的,然后有一个 ip 的用户输入法。然后,您可以将 IP 保存在文件中,并在以后需要时重新加载。不需要扫描网络,原理是一样的。
  • #hoijf 您建议的所有内容都是正确的,但不适合我的特定用例。无论如何,正如@sanjayk79 所建议的那样,我似乎需要找出一些保证始终可用的 IP,但由于我们的网络确实是动态的,这仍然是一个冒险的案例。
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多