一、背景介绍
在开发网络应用程序时,我们常常需要获取本地IP地址。而在Java中,就可以使用不同的方式获取本地IP地址。以下将介绍四种获取本地IP地址的方法。
二、方法介绍
1. 使用InetAddress.getLocalHost()方法
使用InetAddress.getLocalHost()方法,可以获得本地机器的IP地址。该方法返回一个InetAddress类型的对象,可以调用其getHostAddress()方法获取本机IP地址。
try { InetAddress address = InetAddress.getLocalHost(); String ip = address.getHostAddress(); System.out.println("本机IP地址为:" + ip); } catch (UnknownHostException e) { e.printStackTrace(); }
2. 使用NetworkInterface.getNetworkInterfaces()方法
使用NetworkInterface.getNetworkInterfaces()方法,可以获取计算机上所有的网络接口。通过循环遍历每一个网络接口,判断是否为本地IP地址(127.0.0.1)或者局域网IP地址(192.168.xx.xx 或 10.xx.xx.xx)。如果是,则返回该IP地址。
try { Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface networkInterface = interfaces.nextElement(); Enumeration addresses = networkInterface.getInetAddresses(); while (addresses.hasMoreElements()) { InetAddress address = addresses.nextElement(); if (address.isSiteLocalAddress() && !address.isLoopbackAddress() && address.getHostAddress().indexOf(":")==-1) { String ip = address.getHostAddress(); System.out.println("本机IP地址为:" + ip); } } } } catch (SocketException e) { e.printStackTrace(); }
3. 使用System.getProperty()方法
使用System.getProperty()方法,可以获取本机的一些系统属性。其中,”java.net.preferIPv4Stack”为一个系统属性,将其设置为”true”即可获取计算机上的IPv4地址。
String ip = ""; try { InetAddress inetAddress = InetAddress.getLocalHost(); ip = System.getProperty("java.net.preferIPv4Stack").equals("true")?inetAddress.getHostAddress():null; } catch (Exception e) { e.printStackTrace(); } System.out.println("本机IP地址为:" + ip);
4. 使用Runtime.getRuntime().exec()方法
可以通过执行系统命令ipconfig或ifconfig,来获取本地IP地址。如果使用Windows系统,则使用ipconfig;如果使用Linux系统,则使用ifconfig。以下是在Windows系统下获取本地IP地址的示例代码:
StringBuffer buf = new StringBuffer(); try { Process process = Runtime.getRuntime().exec("ipconfig"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = ""; while ((line = reader.readLine()) != null) { buf.append(line + "\n"); } reader.close(); } catch (IOException e) { e.printStackTrace(); } String regex = "IPv4 地址.*: ((\\d+\\.){3}\\d+)"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(buf.toString()); if (matcher.find()) { String ip = matcher.group(1); System.out.println("本机IP地址为:" + ip); }
三、总结
以上就是获取本机IP地址的四种方法,每种方法都有其适用的场景和优缺点。开发者可以根据具体需求选择使用哪种方法来获取本地IP地址。