`

linux中InetAddress.getLocalHost() 出现异常

 
阅读更多

 

使用: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());
	}
}

 

 

分享到:
评论

相关推荐

    Java高级程序设计:第14章-基于Socket的网络编程.pptx

    InetAddress localAddr = InetAddress.getLocalHost();//获得本机InetAddress System.out.println(localAddr.getHostName());//输出主机名 System.out.println(localAddr.getHostAddress());//输出IP地址 // 通过...

    解决linux找不到hostname的处理

    在Linux系统中,当程序试图获取本地主机名时(例如通过调用`InetAddress.getLocalHost()`),它会首先尝试通过DNS解析当前主机名。如果DNS查询失败,则会检查`/etc/hosts`文件中的条目。在这个例子中,显然这两种...

    域名转IP(InetAddress)

    使用`InetAddress.getByName(String host)`方法,传入一个域名或IP地址字符串,返回对应的`InetAddress`对象。例如: ```java String domain = "www.example.com"; try { InetAddress inetAddress = ...

    java获取ipjava获取ipjava获取ipjava获取ipjava获取ip

    System.out.println("本地IPv4地址:" + InetAddress.getLocalHost().getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } } ``` 这段代码会输出本机的主机名和IPv4地址。但是...

    socket编程集萃

    1. 创建Socket对象,传入服务器的IP地址和端口号,如`Socket client = new Socket(InetAddress.getLocalHost(), 5678)`。`InetAddress`类用于获取IP地址,可以通过名字或IP直接获取。 2. 通过Socket对象的`...

    InetAddress 类中dns解析后域名、ip清空

    Class inetAddressClass = java.net.InetAddress.class; Field cacheField = inetAddressClass.getDeclaredField("addressCache"); cacheField.setAccessible(true); Object obj; obj = (Object) cacheField....

    Android开发之InetAddress基础入门简介与源码实例

    例如,`InetAddress.getByName("www.baidu.com")`会返回一个InetAddress对象,其中包含了“www.baidu.com”的IP地址。 - `getLocalHost()`:这个方法用于获取本地主机的InetAddress对象,可以用来获取设备的IP地址...

    java 获取计算机名与IP地址

    在上述代码中,`InetAddress.getLocalHost()`方法返回一个表示当前主机的`InetAddress`对象,然后通过调用其`getHostName()`方法来获取计算机名。 接下来,我们讨论如何获取IP地址。IP地址是互联网上设备的唯一标识...

    获取本机ip地址

    利用InetAddress.getLocalHost()获取本机ip地址和本地主机名

    logback-flume-appender:Logback追加程序将日志消息转发到Flume代理

    hostname :主机名,如果未设置,则通过Box主机名通过InetAddress.getLocalHost().getHostName()进行推断InetAddress.getLocalHost().getHostName() type :日志类型,如果未设置,将被忽略 flumeAgents :以逗号...

    TCP并发上传——java源码

    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和URL

    InetAddress localAddress = InetAddress.getLocalHost(); System.out.println(localAddress.getHostAddress()); ``` - **获取多个IP地址**:`getAllByName(String hostName)` 方法返回一个包含所有IP地址的`...

    get_comput_name.rar_DEMO

    在Java中,我们可以利用`java.net.InetAddress.getLocalHost().getHostName()`来获取。 以下是一个Python示例,演示如何获取本地计算机名称: ```python import socket def get_computer_name(): return socket....

    InetAddress源码

    除了使用`getLocalHost()`,也可以通过`InetAddress.getByAddress(byte[] addr)`来创建一个`InetAddress`对象,传入预先知道的IP地址字节数组。这种方法适用于已知IP地址的情况下。 在分布式系统中,`InetAddress`...

    用java获取IP地址

    为了避免这种情况,可以使用`InetAddress.getLocalHost()`方法来获取本机的IP地址。 ##### 示例代码 ```java import java.net.InetAddress; import java.net.UnknownHostException; public class NsLookup { ...

    示例3.1 使用InetAddress

    InetAddress localHost = InetAddress.getLocalHost(); System.out.println("本地主机名: " + localHost.getHostName()); System.out.println("本地IP地址: " + localHost.getHostAddress()); ``` 接着,我们来了解...

    获取IP地址实例代码

    System.out.println("IP地址: " + InetAddress.getLocalHost().getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } } ``` 3. **JavaScript**: 在浏览器环境中,由于同源...

    《CP程序设计基础》PPT课件.ppt

    * InetAddress.getLocalHost():获取本地主机的IP地址。 * InetAddress.getLoopbackAddress():获取回环地址。 二、ServerSocket类 ServerSocket类是java.net包中的一员,主要用于表示服务器套接字。ServerSocket...

    获取本机IP和主机名方法

    InetAddress inet = InetAddress.getLocalHost(); System.out.println("主机名: " + inet.getHostName()); } } ``` 2. Java获取IP: ```java public static void main(String[] args) throws Exception { ...

Global site tag (gtag.js) - Google Analytics