本文主要是介绍使用NetworkInterface解决InetAddress.getLocalHost().getHostAddress()获取ip为127.0.0.1问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
InetAddress.getLocalHost().getHostAddress() 根据本机名去/etc/hosts中获取对应ip,所以经常会出现获取到127.0.0.1的情况,使用NetworkInterface.getNetworkInterfaces()从网卡中获取ip可避免该情况。工具类如下
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;/*** 获取ip工具类* * @author huaisf**/
public class IpUtil {public static String getLocalIp() {InetAddress inetAddress = null;boolean isFind = false; // 返回标识Enumeration<NetworkInterface> networkInterfaceLists = null;try {// 获取网络接口networkInterfaceLists = (Enumeration<NetworkInterface>) NetworkInterface.getNetworkInterfaces();} catch (SocketException e) {e.printStackTrace();}while (networkInterfaceLists.hasMoreElements()) {NetworkInterface networkInterface = (NetworkInterface) networkInterfaceLists.nextElement();Enumeration<InetAddress> ips = networkInterface.getInetAddresses();// 遍历所有ip,获取本地地址中不是回环地址的ipv4地址while (ips.hasMoreElements()) {inetAddress = (InetAddress) ips.nextElement();if (inetAddress instanceof Inet4Address && inetAddress.isSiteLocalAddress()&& !inetAddress.isLoopbackAddress()) {isFind = true;break;}}if (isFind) {break;}}return inetAddress == null ? "" : inetAddress.getHostAddress();}}
这篇关于使用NetworkInterface解决InetAddress.getLocalHost().getHostAddress()获取ip为127.0.0.1问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!