关于如何在Java中检索多个IP地址(如果我有多个网卡)的一些疑问?

 用户76rmcbq626 发布于 2023-02-13 11:22

我在检索客户端的ip时遇到以下两个问题.

我在一个类中创建了以下代码:

private static InetAddress thisIp;

static{
    try {
        thisIp  = InetAddress.getLocalHost();
        System.out.println("MyIp is: " + thisIp);
    } catch(UnknownHostException ex) {

    }
}

我的问题是:

1)前面的代码应检索客户端的IP地址,当我执行它时,它会打印以下消息:

MyIp是:andrea-virtual-machine/127.0.1.1

为什么它以andrea-virtual-machine /开头?(我在虚拟机上开发),这是一个问题吗?

2)通过这种方式,我只能检索一个IP地址,但我可以拥有多个网卡,这样我就可以拥有多个IP地址但多个IP地址

我该怎么做才能处理这种情况?我想把所有多个IP地址放入ArrayList

TNX

安德里亚

1 个回答
    1. 不,这不是问题,它只是一个由主机名和IP(hostname/ip)组成的输出.您可能想要阅读的详细信息:实现toString()类中的方法InetAddress以返回此格式.

      以下代码将列出系统中每个接口的所有IP地址(并将它们存储在您可以传递的列表中等等):

      public static void main(String[] args) throws InterruptedException, IOException
      {
          List<String> allIps = new ArrayList<String>();
          Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();
          while (e.hasMoreElements())
          {
              NetworkInterface n = e.nextElement();
              System.out.println(n.getName());
              Enumeration<InetAddress> ee = n.getInetAddresses();
              while (ee.hasMoreElements())
              {
                  InetAddress i = ee.nextElement();
                  System.out.println(i.getHostAddress());
                  allIps.add(i.getHostAddress());
              }
          }
      }
      

    该方法boolean isLoopbackAddress()允许您过滤可能不需要的环回地址.

    返回的InetAddress是a Inet4Address或a Inet6Address,使用instanceof你可以判断返回的IP是IPv4还是IPv6格式.

    2023-02-13 11:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有