用Java创建InetAddress对象


81

我试图将由IP地址或名称指定的地址(都用String(即localhost127.0.0.1))转换为InetAdress对象。没有构造函数,而是返回InetAddress的静态方法。因此,如果我获得了主机名,这不是问题,但是如果我获得了IP号怎么办?有一种方法可以获取byte [],但是我不确定这对我有什么帮助。所有其他方法均获取主机名。

InetAddress API文档

Answers:


133

您应该可以使用getByNamegetByAddress

主机名可以是机器名,例如“ java.sun.com”,也可以是其IP地址的文本表示形式

InetAddress addr = InetAddress.getByName("127.0.0.1");

采用字节数组的方法可以像这样使用:

byte[] ipAddr = new byte[]{127, 0, 0, 1};
InetAddress addr = InetAddress.getByAddress(ipAddr);

3
当数字大于127时,您会怎么做?例如IP 192.168.0.1。您是否使用0xFF屏蔽int?还是只是将int转换为byte?
Matej Kormuth 2015年

@MatejKormuth我认为使用0xFF进行屏蔽应该起作用。
Bala R

1
@ matej-kormuth,您也可以像Inet4AddressImpl一样来表达它:byte[] loopback = {0x7f,0x00,0x00,0x01};
卡洛斯·费雷拉

“默认构造函数不能处理由隐超级构造函数抛出的异常类型的UnknownHostException必须定义一个明确的构造函数。”
Schütze

帮助将InetAddress的创建包含在try / catch语句中。
马修·雷德蒙德

9

从InetAddress的API

主机名可以是机器名称,例如“ java.sun.com”,也可以是其IP地址的文本表示。如果提供了原义IP地址,则仅检查地址格式的有效性。


7
ip = InetAddress.getByAddress(new byte[] {
        (byte)192, (byte)168, (byte)0, (byte)102}
);

3

InetAddress.getByName也适用于IP地址。

从JavaDoc

主机名可以是机器名称,例如“ java.sun.com”,也可以是其IP地址的文本表示。如果提供了原义IP地址,则仅检查地址格式的有效性。


3

该API非常易于使用。

// Lookup the dns, if the ip exists.
 if (!ip.isEmpty()) {
     InetAddress inetAddress = InetAddress.getByName(ip);
     dns = inetAddress.getCanonicalHostName(); 
 }

0

这是一个用于获取任何网站的IP地址的项目,它非常有用而且易于创建。

import java.net.InetAddress;
import java.net.UnkownHostExceptiin;

public class Main{
    public static void main(String[]args){
        try{
            InetAddress addr = InetAddresd.getByName("www.yahoo.com");
            System.out.println(addr.getHostAddress());

          }catch(UnknownHostException e){
             e.printStrackTrace();
        }
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.