`
kobexing933
  • 浏览: 120277 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

创建InetAddress对象的四个静态方法

阅读更多

 InetAddress可以通过getLocalHost方法得到本机的InetAddress对象,也可以通过getByName、getAllByName和 getByAddress得到远程主机的InetAddress对象。
  一、getLocalHost方法
  使用getLocalHost可以得到描述本机IP的InetAddress对象。这个方法的定义如下:
  public static InetAddress getLocalHost() throws UnknownHostException
  这个方法抛出了一个UnknownHostException异常,因此,必须在调用这个方法的程序中捕捉或抛出这个异常。下面的代码演示了如何使用getLocalHost来得到本机的IP和计算机名。
  package inet;
  import java.net.*;
  public class MyInetAddress1
  {
  public static void main(String[] args) throws Exception
  {
  InetAddress localAddress = InetAddress.getLocalHost();
  System.out.println(localAddress);}
  }
  运行结果:
  ComputerName/192.168.18.10
  在InetAddress类中覆盖了Object类的toString方法,实现如下:
  public String toString()
  {
  return ((hostName != null) ? hostName : "") + "/" + getHostAddress();
  }
  从上面的代码可以看出,InetAddress方法中的toString方法返回了用“/”隔开的主机名和IP地址。因此,在上面的代码中直接通过 localAddress对象来输出本机计算机名和IP地址(将对象参数传入println方法后,println方法会调用对象参数的toString 方法来输出结果)。
  当本机绑定了多个IP时,getLocalHost只返回第一个IP.如果想返回本机全部的IP,可以使用getAllByName方法。
  二、getByName方法
  这个方法是InetAddress类最常用的方法。它可以通过指定域名从DNS中得到相应的IP地址。getByName一个String类型参数,可以通过这个参数指定远程主机的域名,它的定义如下:
  public static InetAddress getByName(String host) throws UnknownHostException
  如果host所指的域名对应多个IP,getByName返回第一个IP.如果本机名已知,可以使用getByName方法来代替 getLocalHost.当host的值是localhost时,返回的IP一般是127.0.0.1.如果host是不存在的域名,getByName将抛出UnknownHostException异常,如果host是IP地址,无论这个IP地址是否存在,getByName方法都会返回这个IP地址(因此getByName并不验证IP地址的正确性)。下面代码演示了如何使用getByName方法:
  package inet;
  import java.net.*;
  public class MyInetAddress2
  {
  public static void main(String[] args) throws Exception
  {
  if (args.length == 0)
  return;
  String host = args[0];
  InetAddress address = InetAddress.getByName(host);
  System.out.println(address);
  }
  }
  测试1:远程主机www.csdn.net
  执行如下命令:
  java inet.MyInetAddress2 www.csdn.net
  运行结果:
  www.csdn.net/211.100.26.124
  测试2:本机名ComputerName
  执行如下命令:
  java inet.MyInetAddress2 ComputerName
  运行结果:
  ComputerName/192.168.18.10
  测试3:代表本机的localhost
  执行如下命令:
  java inet.MyInetAddress2 localhost
  运行结果:
  localhost/127.0.0.1
  对于本机来说,除了可以使用本机名或localhost外,还可以在hosts文件中对本机做“IP/域名”映射(在Windows操作系统下)。这个文件在C:\WINDOWS\system32\drivers\etc中。打开这两个文件中,在最后加一行如下所示的字符串:
  192.168.18.100 www.mysite.com
  测试4:本机域名www.mysite.com
  执行如下命令:
  java inet.MyInetAddress2 www.mysite.com
  运行结果:
  www.mysite.com/192.168.18.100
  getByName方法除了可以使用域名作为参数外,也可以直接使用IP地址作为参数。如果使用IP地址作为参数,输出InetAddress对象时域名为空(除非调用getHostName方法后,再输出InetAddress对象。getHostName方法将在下面的内容介绍)。读者可以使用 129.42.58.212作为MyInetAddress2的命令行参数(这是www.ibm.com的IP),看看会得到什么结果。  三、getAllByName方法
  使用getAllByName方法可以从DNS上得到域名对应的所有的IP.这个方法返回一个InetAddress类型的数组。这个方法的定义如下:
  public static InetAddress[] getAllByName(String host) throws UnknownHostException
  与getByName方法一样,当host不存在时,getAllByName也会抛出UnknowHostException异常,getAllByName也不会验证IP地址是否存在。下面的代码演示了getAllByName的用法:
  package inet;
  import java.net.*;
  public class MyInetAddress3
  {
  public static void main(String[] args) throws Exception
  {
  if (args.length == 0)
  return;
  String host = args[0];
  InetAddress addresses[] = InetAddress.getAllByName(host);
  for (InetAddress address : addresses)
  System.out.println(address);
  }
  }
  测试1:远程主机www.csdn.net
  执行如下命令:
  java inet.MyInetAddress3 www.csdn.net
  运行结果:
  www.csdn.net/211.100.26.124
  www.csdn.net/211.100.26.121
  www.csdn.net/211.100.26.122
  www.csdn.net/211.100.26.123
  将上面的运行结果和例程3-2的测试1的运行结果进行比较,可以得出一个结论,getByName方法返回的IP地址就是getAllByName方法返回的第一个IP地址。事实上,getByName的确是这样实现的,getByName的实现代码如下:
  public static InetAddress getByName(String host) throws UnknownHostException
  {
  return InetAddress.getAllByName(host)[0];
  }
  测试2:使用www.csdn.net的一个IP
  执行如下命令:
  java inet.MyInetAddress3 211.100.26.122
  运行结果:
  /211.100.26.122
  四、getByAddress方法
  这个方法必须通过IP地址来创建InetAddress对象,而且IP地址必须是byte数组形式。getByAddress方法有两个重载形式,定义如下:
  public static InetAddress getByAddress(byte[] addr) throws UnknownHostException
  public static InetAddress getByAddress(String host, byte[] addr) throws UnknownHostException
  第一个重载形式只需要传递byte数组形式的IP地址,getByAddress方法并不验证这个IP地址是否存在,只是简单地创建一个 InetAddress对象。addr数组的长度必须是4(IPv4)或16(IPv6),如果是其他长度的byte数组,getByAddress将抛出一个UnknownHostException异常。第二个重载形式多了一个host,这个host和getByName、getAllByName方法中的host的意义不同,getByAddress方法并不使用host在DNS上查找IP地址,这个host只是一个用于表示addr的别名。下面的代码演示了getByAddress的两个重载形式的用法:
  package inet;
  import java.net.*;
  public class MyInetAddress4
  {
  public static void main(String[] args) throws Exception
  {
  byte ip[] = new byte[] { (byte) 141, (byte) 146, 8 , 66};
  InetAddress address1 = InetAddress.getByAddress(ip);
  InetAddress address2 = InetAddress.getByAddress("Oracle官方网站", ip);
  System.out.println(address1);
  System.out.println(address2);
  }
  }
  上面代码的运行结果如下:
  /141.146.8.66
  Oracle官方网站/141.146.8.66
  从上面的运行结果可以看出,getByAddress只是简单地将host参数作为域名放到“/”前面,因此,host可以是任何字符串。 

分享到:
评论

相关推荐

    InetAddress和URL

    用户需要通过类提供的静态方法来获取`InetAddress`对象。 #### 二、InetAddress的主要功能与使用 ##### 1. 获取`InetAddress`实例 - **通过域名获取IP地址**:`getByName(String hostName)` 方法可以通过指定的...

    java网络编程.ppt

    创建InetAddress对象通常通过静态方法`getByName(String host)`或者`getAllByName(String host)`,传入主机名或IP地址字符串。 总的来说,Java网络编程通过提供强大的类库和抽象,使得开发者能够方便地构建各种网络...

    Java之网络编程篇

    ##### 3.2 创建InetAddress对象的方法 `InetAddress`类没有提供公有的构造函数,而是通过静态方法来创建对象。下面是三种常见的创建方式: 1. **getLocalHost()**:此方法返回当前运行Java程序的本地主机的`...

    Socket通信样例代码

    在Java中,我们可以使用`InetAddress`类的静态方法`getByName(String host)`来根据主机名获取IP地址,或者用`getHostAddress()`方法从IP地址对象中获取IP字符串形式。例如,`InetAddress.getByName("example.com")`...

    Java网络编程

    #### 二、创建InetAddress对象的四种静态方法 在Java中,`java.net.InetAddress`类用于表示IP地址。可以通过以下四种静态方法创建`InetAddress`对象: 1. `getByName(String host)`:通过主机名或IP地址字符串创建...

    Java网络编程.pdf

    1. **创建InetAddress对象**:可以通过四个静态方法创建`InetAddress`对象,包括通过主机名、IP地址或者同时指定主机名和IP地址。 2. **域名与IP转换**:`getHostName()`和`getCanonicalHostName()`用于获取主机名,...

    网络编程PDF

    程序员可以使用InetAddress类提供的静态方法getByName()来获取一个InetAddress实例,该实例代表了与参数中提供的主机名或IP地址字符串相对应的地址。 3. 套接字(Socket):套接字是网络通信的基本组件,用于连接两...

    ipv4和ipv6字符串转换成数字

    该方法首先将`BigInteger`转换为字节数组,然后使用`InetAddress`类提供的静态方法`getByAddress`将字节数组转换为`InetAddress`对象,最后获取其字符串表示形式。 ### 示例代码分析 #### 示例代码 ```java public...

    java套接字编程java套接字编程.doc

    InetAddress类提供了静态方法getByName()和getAllByName(),可以根据主机名或IP地址获取InetAddress对象。 端口号是一个16位的无符号整数,范围是0-65535,以区别主机上的每一个程序(端口号就像房屋中的房间号)。...

    2021-2022计算机二级等级考试试题及答案No.14835.docx

    其他选项描述不正确,抽象类可以包含非抽象方法,静态方法可以被任何类调用,不只是类C的静态方法。 8. Word的页眉与页脚:Word文档的顶部空白部分被称为页眉,底部为页脚。 9. Python表达式eval:eval函数可以...

    UDP的Java聊天程序

    通过调用`getByName`静态方法并提供字符串形式的IP地址,可以获得对应的IP地址对象。该对象可以传递给`DatagramPacket`,从而实现在指定IP地址上的数据发送。 #### 五、Java UDP聊天程序实现 在实现基于UDP的聊天...

    11-java进阶-网络编程1

    它提供了一些静态方法来获取`InetAddress` 实例,例如: - `getByName(String host)`:根据主机名或IP地址字符串返回相应的`InetAddress`对象。 - `getLocalHost()`:返回代表本地主机的`InetAddress`对象。 ### ...

    java复习题及答案。

    获取InetAddress对象的主机名所用到的方法是:** - **选项:** AgetByName() BgetHostAddress() CgetLocalHost() DgetHostName() - **正确答案:** DgetHostName() - **解析:** `getHostName()`方法用于获取`...

    java期末测验题答案.docx

    根据提供的文档信息,这里将对其中的关键知识点进行详细的解析与扩展。... - 选项 A 中的 `Socket s=new Socket (InetAddress.get...)` 正确地展示了如何使用本机地址创建一个客户端 Socket 对象。

    java初级知识

    `java.util.Arrays`类提供了许多静态方法,用于操作数组,例如排序、查找等。 **13. Java5新特性对数组的支持** Java5引入了增强的for循环,简化了数组的遍历: ```java int[] arr = {1, 2, 3}; for (int i : arr) ...

    疯狂JAVA讲义

    学生提问:我们只是创建了一个Ostrich对象时,哪来的Bird对象? 147 5.6.4 调用父类构造器 148 学生提问:为什么我创建Java对象时从未感觉到java.lang.Object的构造器被调用过? 150 5.7 多态 151 5.7.1 多态性 ...

    java期末模拟测验答案编程资料

    - 面向对象编程的四个主要特性:继承、多态、封装与抽象。 - **详细解析**: - **继承性**:允许子类继承父类的属性和方法,提高了代码的复用性和扩展性。 - **多态性**:指同一操作作用于不同的对象,可以有不同...

Global site tag (gtag.js) - Google Analytics