使用:InetAddress.getLocalHost() 出现异常:
“Reason: java.net.UnknownHostException zw_65_43 : .....
问题原因是在系统的 /etc/Hostname中配置了“zw_65_43” 作为主机名,
而在/etc/hosts文件中没有 相应的“zw_65_43”。
简单的解决办法是对应关系配好就可以,甚至删除/etc/Hostname这个文件也可以。
深层的原因: 在大多数Linux操作系统中,都是以/etc/hosts中的配置查找主机名的,
但是 Detian based system 用/etc/Hostname文件中的配置做主机名。
而Java 的InetAddress.java 调用 InetAddressImpl.java 的
public native String getLocalHostName() throws UnknownHostException; 来获取本地主机名,
Java 的这个方法是native的,是本地系统的一个实现,所以在本地配置出现问题的情况下,Java 代码出现问题。
或使用下面的解决方案
package org.jasig.cas.a4.tools; import java.net.*; import java.util.*; public class IPUtil { public static String getMacAddr() { String MacAddr = ""; String str = ""; try { NetworkInterface NIC = NetworkInterface.getByName("eth0"); byte[] buf = NIC.getHardwareAddress(); for (int i = 0; i < buf.length; i++) { str = str + byteHEX(buf[i]); } MacAddr = str.toUpperCase(); } catch (SocketException e) { e.printStackTrace(); System.exit(-1); } return MacAddr; } public static String getLocalIP() { String ip = ""; try { Enumeration<?> e1 = (Enumeration<?>) NetworkInterface .getNetworkInterfaces(); while (e1.hasMoreElements()) { NetworkInterface ni = (NetworkInterface) e1.nextElement(); if (!ni.getName().equals("eth0")) { continue; } else { Enumeration<?> e2 = ni.getInetAddresses(); while (e2.hasMoreElements()) { InetAddress ia = (InetAddress) e2.nextElement(); if (ia instanceof Inet6Address) continue; ip = ia.getHostAddress(); } break; } } } catch (SocketException e) { e.printStackTrace(); System.exit(-1); } return ip; } /* 一个将字节转化为十六进制ASSIC码的函数 */ public static String byteHEX(byte ib) { char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; char[] ob = new char[2]; ob[0] = Digit[(ib >>> 4) & 0X0F]; ob[1] = Digit[ib & 0X0F]; String s = new String(ob); return s; } public static void main(String[] args) { IPUtil t = new IPUtil(); System.out.println(t.getLocalIP()); System.out.println(t.getMacAddr()); } }
相关推荐
InetAddress localAddr = InetAddress.getLocalHost();//获得本机InetAddress System.out.println(localAddr.getHostName());//输出主机名 System.out.println(localAddr.getHostAddress());//输出IP地址 // 通过...
在Linux系统中,当程序试图获取本地主机名时(例如通过调用`InetAddress.getLocalHost()`),它会首先尝试通过DNS解析当前主机名。如果DNS查询失败,则会检查`/etc/hosts`文件中的条目。在这个例子中,显然这两种...
使用`InetAddress.getByName(String host)`方法,传入一个域名或IP地址字符串,返回对应的`InetAddress`对象。例如: ```java String domain = "www.example.com"; try { InetAddress inetAddress = ...
System.out.println("本地IPv4地址:" + InetAddress.getLocalHost().getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } } ``` 这段代码会输出本机的主机名和IPv4地址。但是...
1. 创建Socket对象,传入服务器的IP地址和端口号,如`Socket client = new Socket(InetAddress.getLocalHost(), 5678)`。`InetAddress`类用于获取IP地址,可以通过名字或IP直接获取。 2. 通过Socket对象的`...
Class inetAddressClass = java.net.InetAddress.class; Field cacheField = inetAddressClass.getDeclaredField("addressCache"); cacheField.setAccessible(true); Object obj; obj = (Object) cacheField....
例如,`InetAddress.getByName("www.baidu.com")`会返回一个InetAddress对象,其中包含了“www.baidu.com”的IP地址。 - `getLocalHost()`:这个方法用于获取本地主机的InetAddress对象,可以用来获取设备的IP地址...
在上述代码中,`InetAddress.getLocalHost()`方法返回一个表示当前主机的`InetAddress`对象,然后通过调用其`getHostName()`方法来获取计算机名。 接下来,我们讨论如何获取IP地址。IP地址是互联网上设备的唯一标识...
利用InetAddress.getLocalHost()获取本机ip地址和本地主机名
hostname :主机名,如果未设置,则通过Box主机名通过InetAddress.getLocalHost().getHostName()进行推断InetAddress.getLocalHost().getHostName() type :日志类型,如果未设置,将被忽略 flumeAgents :以逗号...
new TCPClient(bufOut.toByteArray(), InetAddress.getLocalHost(), 1211); break; } else { bufOut.write(buf, 0, len); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch ...
在Java中,获取本地主机名可以使用`InetAddress.getLocalHost()`方法。这个方法返回一个`InetAddress`对象,该对象包含了本地主机的IP地址和主机名。下面是一个简单的示例: ```java import java.net.InetAddress; ...
InetAddress localAddress = InetAddress.getLocalHost(); System.out.println(localAddress.getHostAddress()); ``` - **获取多个IP地址**:`getAllByName(String hostName)` 方法返回一个包含所有IP地址的`...
在Java中,我们可以利用`java.net.InetAddress.getLocalHost().getHostName()`来获取。 以下是一个Python示例,演示如何获取本地计算机名称: ```python import socket def get_computer_name(): return socket....
除了使用`getLocalHost()`,也可以通过`InetAddress.getByAddress(byte[] addr)`来创建一个`InetAddress`对象,传入预先知道的IP地址字节数组。这种方法适用于已知IP地址的情况下。 在分布式系统中,`InetAddress`...
为了避免这种情况,可以使用`InetAddress.getLocalHost()`方法来获取本机的IP地址。 ##### 示例代码 ```java import java.net.InetAddress; import java.net.UnknownHostException; public class NsLookup { ...
InetAddress localHost = InetAddress.getLocalHost(); System.out.println("本地主机名: " + localHost.getHostName()); System.out.println("本地IP地址: " + localHost.getHostAddress()); ``` 接着,我们来了解...
System.out.println("IP地址: " + InetAddress.getLocalHost().getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } } ``` 3. **JavaScript**: 在浏览器环境中,由于同源...
* InetAddress.getLocalHost():获取本地主机的IP地址。 * InetAddress.getLoopbackAddress():获取回环地址。 二、ServerSocket类 ServerSocket类是java.net包中的一员,主要用于表示服务器套接字。ServerSocket...
InetAddress inet = InetAddress.getLocalHost(); System.out.println("主机名: " + inet.getHostName()); } } ``` 2. Java获取IP: ```java public static void main(String[] args) throws Exception { ...