"基于Java实现获取本地IP地址和主机名" 在Java编程中,获取本地IP地址和主机名是一个常见的需求。本文将详细介绍基于Java实现获取本地IP地址和主机名的两种方式,并对每种方式进行了详细的解释和示例代码。 方式一:通过java.net.InetAddress类获取 通过使用java.net.InetAddress类,可以获取本地IP地址和主机名。示例代码如下: ```java public void test1() { try { InetAddress addr = InetAddress.getLocalHost(); System.out.println("IP地址:" + addr.getHostAddress() + ",主机名:" + addr.getHostName()); } catch (UnknownHostException e) { e.printStackTrace(); } } ``` 输出结果: ``` IP地址:192.168.153.1,主机名:DESKTOP-338UP3E ``` 这种方式获取到的主机名没啥问题,但获取到的IP地址却有待考量。如果一台机器有多个网卡,他获取的IP是谁的呢?事实上,上面输出的IP是我虚拟机IP地址,既不是我有线网卡的地址,也不是我无线网卡的地址。 方式二:利用java.net.NetworkInterface获取 通过使用java.net.NetworkInterface类,可以获取所有的网络接口信息,包括IP地址和主机名。示例代码如下: ```java public void test2() { try { Enumeration<NetworkInterface> faces = NetworkInterface.getNetworkInterfaces(); while (faces.hasMoreElements()) { NetworkInterface face = faces.nextElement(); if (face.isLoopback() || face.isVirtual() || !face.isUp()) { continue; } System.out.print("网络接口名:" + face.getDisplayName() + ",地址:"); Enumeration<InetAddress> address = face.getInetAddresses(); while (address.hasMoreElements()) { InetAddress addr = address.nextElement(); if (!addr.isLoopbackAddress() && addr.isSiteLocalAddress() && !addr.isAnyLocalAddress()) { System.out.print(addr.getHostAddress() + " "); } } System.out.println(""); } } catch (SocketException e) { e.printStackTrace(); } } ``` 输出结果: ``` 网络接口名:VMware Virtual Ethernet Adapter for VMnet8,地址:192.168.153.1 网络接口名:TAP-Windows Adapter V9,地址:10.8.0.30 网络接口名:VMware Virtual Ethernet Adapter for VMnet1,地址:192.168.46.1 网络接口名:Intel(R) Dual Band Wireless-AC 8265,地址:172.16.78.27 ``` 通过这种方式,可以获取到所有的网络接口信息,包括IP地址和主机名。 工具类 为了方便使用,我们可以将上述两种方式封装到一个工具类中,例如: ```java import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; public class LocalHostUtil { / * 获取主机名称 * * @return * @throws UnknownHostException */ public static String getHostName() throws UnknownHostException { return InetAddress.getByName("localhost").getHostName(); } / * 获取本地IP地址 * * @return * @throws SocketException */ public static List<String> getLocalIPAddresses() throws SocketException { List<String> addresses = new ArrayList<>(); Enumeration<NetworkInterface> faces = NetworkInterface.getNetworkInterfaces(); while (faces.hasMoreElements()) { NetworkInterface face = faces.nextElement(); if (face.isLoopback() || face.isVirtual() || !face.isUp()) { continue; } Enumeration<InetAddress> address = face.getInetAddresses(); while (address.hasMoreElements()) { InetAddress addr = address.nextElement(); if (!addr.isLoopbackAddress() && addr.isSiteLocalAddress() && !addr.isAnyLocalAddress()) { addresses.add(addr.getHostAddress()); } } } return addresses; } } ``` 通过使用这个工具类,我们可以方便地获取本地IP地址和主机名。

















- 粉丝: 9
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 《网络新世界》教案道德与法治教案1.pdf
- 学习linux心得体会.docx
- 互联网创业计划书.pptx
- excel函数总结.docx
- 江苏自考项目管理真题试卷.doc
- 学案从杂交育种到基因工程.pptx
- 项目管理人员暂时管理方法(记忆).doc
- 二手车市场综合网站建设方案.doc
- 银行网络故障应急处理预案.doc
- 基于OPC通讯协议的自动化仿真平台-实践篇.doc
- 2023年湖南科技大学计算机学院科普知识竞赛初赛题目的答案.doc
- 汽车经销商四S店网络营销电话销售手册.pptx
- 计算思维和计算机基础专业知识讲座.ppt
- 国美电子商务战略规划分析.pptx
- 西门子Modbus-RTU通信.docx
- 网络经济下供应链管理模式的创新与构建.doc


