当前位置: 首页 > article >正文

Java 获取本机 IP 地址的方法

文章目录

    • 一、使用 InetAddress.getLocalHost
    • 二、遍历网络接口获取

在 Java 编程中,若有本机的 IP 地址的需求,小编来展示一下方法:

一、使用 InetAddress.getLocalHost

一是最基本的获取本机 IP 地址的方式。

示例代码:

import java.net.InetAddress;

import java.net.UnknownHostException;

public class GetIPAddress {

    public static void main(String[] args) {

        try {

            InetAddress inetAddress = InetAddress.getLocalHost();

            System.out.println("本机 IP 地址: " + inetAddress.getHostAddress());

        } catch (UnknownHostException e) {

            e.printStackTrace();

        }

    }

}

这种方法在大多数简单场景下可以正常工作,但如果主机有多个网络接口或者处于复杂的网络环境中,可能获取到的不是期望的 IP 地址。

二、遍历网络接口获取

通过遍历所有网络接口来获取更准确的 IP 地址信息。

示例代码:

import java.net.InetAddress;

import java.net.NetworkInterface;

import java.net.SocketException;

import java.util.Enumeration;



public class GetIPAddressByInterface {

    public static void main(String[] args) {

        try {

            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();

            while (networkInterfaces.hasMoreElements()) {

                NetworkInterface networkInterface = networkInterfaces.nextElement();

                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();

                while (inetAddresses.hasMoreElements()) {

                    InetAddress inetAddress = inetAddresses.nextElement();

                    if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().indexOf(':') == -1) {

                        System.out.println("本机 IP 地址: " + inetAddress.getHostAddress());

                    }

                }

            }

        } catch (SocketException e) {

            e.printStackTrace();

        }

    }

}

上述代码首先获取所有网络接口,然后遍历每个接口下的 IP 地址,排除回环地址(isLoopbackAddress 判断)和 IPv6 地址(通过 indexOf(‘:’) == -1 判断),从而得到可能的本机 IP 地址。这种方法在复杂网络环境中能获取到多个符合条件的 IP 地址,可根据实际需求进一步筛选。

通过以上两种方法,可以在 Java 程序中获取本机的 IP 地址,开发人员可根据具体的应用场景选择合适的方法使用。


http://www.kler.cn/a/405200.html

相关文章:

  • MySQL数据库-索引的介绍和使用
  • 【QT】绘图
  • SAP PI/PO Proxy2JDBC SQL_QUERY动态接口示例
  • fastify 连接 mysql
  • Ubuntu20.04从零安装IsaacSim/IsaacLab
  • OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
  • Flink调优详解:案例解析(第42天)
  • 解决 redis 的 key 出现的序列化 \xac\xed\x00\x05t\x00 乱码问题
  • SSM post接口传递json 报错 HTTP状态 415 - 不支持的媒体类型
  • 一篇文章了解机器学习
  • 01 —— Webpack打包流程及一个例子
  • 2 设计模式原则之里约替换原则
  • 新华三H3CNE网络工程师认证—生成树协议
  • LeetCode:98. 验证二叉搜索树
  • 【Swift】类型标注、类型安全和类型推断
  • 【C++】友元成员
  • 给定一个数查找所在区间或者查找所有重叠区间的算法总结
  • Mac配置maven环境及在IDEA中配置Maven
  • @Autowired 和 @Resource思考(注入redisTemplate时发现一些奇怪的现象)
  • 商用密码产品认证名录说明
  • C++在实际项目中的应用第二节:C++与区块链
  • oracle初始化参数
  • Flutter:AnimatedBuilder自定义显示动画
  • mac-mini的时间机器,数据备份到alist 中的网盘
  • 山东春季高考-C语言-综合应用题
  • WPF里面的C1FlexGrid表格控件添加RadioButton单选