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

java.net.InetAddress类的使用

 
阅读更多

1.简介

IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础。InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。

InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名(如果使用主机名来获取InetAddress的实例,或者使用数字来构造,并且启用了反向主机名解析的功能)。InetAddress类提供了将主机名解析为IP地址(或反之)的方法。

InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。对于DNS来说,本地需要向DNS服务器发送查询的请求,然后服务器根据一系列的操作,返回对应的IP地址,为了提高效率,通常本地会缓存一些主机名与IP地址的映射,这样访问相同的地址,就不需要重复发送DNS请求了。在java.net.InetAddress类同样采用了这种策略。在默认情况下,会缓存一段有限时间的映射,对于主机名解析不成功的结果,会缓存非常短的时间(10秒)来提高性能。


2.InetAddress对象的获取

InetAddress的构造函数不是公开的(public),所以需要通过它提供的静态方法来获取,有以下的方法:

static InetAddress[] getAllByName(String host)

static InetAddress getByAddress(byte[] addr)

static InetAddress getByAddress(String host,byte[] addr)

static InetAddress getByName(String host)

static InetAddress getLocalHost()

在这些静态方法中,最为常用的应该是getByName(String host)方法,只需要传入目标主机的名字,InetAddress会尝试做连接DNS服务器,并且获取IP地址的操作。代码片段如下,注意我们假设以下的代码,都是默认导入了java.net中的包,在程序的开头加上import java.net.*,否则需要指定类的全名java.net.InetAddress。

InetAddress address=InetAddress.getByName("www.baidu.com");

注意到这些方法可能会抛出的异常。如果安全管理器不允许访问DNS服务器或禁止网络连接,SecurityException会抛出,如果找不到对应主机的IP地址,或者发生其他网络I/O错误,这些方法会抛出UnknowHostException。所以需要写如下的代码:

try
{
  InetAddress address=InetAddress.getByName("www.baidu.com");
  System.out.println(address);
}
catch(UnknownHostException e)
{
  e.printStackTrace();
}

 

下面是一则完整的例子:

 

import java.net.InetAddress;

/**
 * this example is used to show how to get InetAddress instance
 * 
 * @author Dakiler
 */

public class Example1 {
	public static void main(String args[]) throws Exception {
		InetAddress address = InetAddress.getByName("www.baidu.com");
		System.out.println(address);
		System.out.println("-----");
		InetAddress[] addresses = InetAddress.getAllByName("www.baidu.com");
		for (InetAddress addr : addresses) {
			System.out.println(addr);
		}
	}
}

 

运行结果如下:

www.baidu.com/119.75.213.61

-----

www.baidu.com/119.75.213.61

www.baidu.com/119.75.216.30

在这个例子中,我们使用到了getByName()以及getAllByName()两个方法,前者通过"www.baidu.com"来获取InetAddress的对象,并且输出到控制台。System.out.println(address); 默认调用了InetAddress.toString()方法,在结果中可以看到"www.baidu.com/119.75.213.61"的输出结果,其中119.75.213.61为百度网站的IP地址。

getAllByName()方法是根据主机名返回其可能的所有InetAddress对象,保存在一个数组中。在这个例子中,输出的结果中,www.baidu.com有两个ip地址分别为119.75.213.61以及119.75.216.30。

另外一个静态常用的静态方法是getLocalHost(),返回的是本地地址,如下例:

import java.net.InetAddress;

public class Example2
{
  public static void main(String args[])throws Exception
  {
    InetAddress address=InetAddress.getLocalHost();
    System.out.println(address);
 }
}

 

这个例子首先是根据InetAddress.getLocalHost()方法获取本地IP地址,然后通过System.out.println()打印出来,结果如下:
dakiler/192.168.1.102

Source:http://www.cnblogs.com/hnrainll/archive/2012/01/09/2317515.html

分享到:
评论

相关推荐

    import java.net.*;import java.io.*;

    import java.net.*; import java.io.*; public class udptest { ///创建一个数据包套接字对象ds,并且指定连接的端口号 ///创建一个数据包对象dp ///指定一个字节数组,用来存储接受的数据 public static void ...

    clojure-inetaddress:Clojure InetAddress。 java.net.InetAddress 类包装器

    java.net.InetAddress 类包装器。 用法 获取主机的 IP 地址,给定主机名: => (by-name "github.com") # 获取本地主机地址: => (localhost) # 检查地址地址是否可达: => (reachable? (by-name "server-in-...

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

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

    项目源码-java网络五子棋游戏

    import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.sql.Time; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing....

    项目源码-java企业QQ项目

    import java.net.InetAddress; import java.net.UnknownHostException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java....

    ip6-java.zip

    1. **InetAddress类**:Java的`java.net.InetAddress`类是处理IP地址的核心类,它支持IPv4和IPv6。你可以通过`getByName()`方法解析IP地址字符串,或者通过`getLocalHost()`获取本地主机的地址。 2. **Socket编程**...

    Android中socket通信简单实现

    Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。...import java.net.InetAddress; import java.net.ServerSocket; import java.net.So

    coke-very-the.rar_Coke

    5. InetAddress.java:`java.net.InetAddress`类用于表示互联网的主机地址,包括IP地址和主机名。获取本机IP地址通常就是通过此类的静态方法`getLocalHost()`来实现。 6. DatagramSocket.java:`java.net....

    计算机网络课程设计

    import java.net.InetAddress;import java.net.Socket;public class SimpleHttpClientUsingSocket {public static void main(String[] args) {String host = null;if (args.length > 0) {host = args[0];} else {...

    Java程序设计(雍俊海)ch12

    Java的`java.net.InetAddress`类用于处理这些地址,可以使用`getByName()`方法获取指定域名的IP地址,或者使用`getByAddress()`方法根据IP地址创建`InetAddress`对象。 6. 类InetAddress的实例化:由于`InetAddress...

    TCP并发上传——java源码

    new TCPClient(bufOut.toByteArray(), InetAddress.getLocalHost(), 1211); break; } else { bufOut.write(buf, 0, len); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch ...

    java网络编程(jsp编程)

    在Java中,使用`java.net.Socket`和`java.net.ServerSocket`类进行TCP通信,而UDP通信则涉及到`java.net.DatagramSocket`和`java.net.DatagramPacket`。 在Java中编写UDP网络程序,主要涉及以下几个关键类和方法: ...

    java获取本机IP地址

    2. 使用`NetworkInterface`类:`java.net.NetworkInterface`类提供了更深入的网络接口信息,可以用来获取所有网络接口的IP地址。以下代码可以获取所有接口的IP地址: ```java import java.net.Inet4Address; import ...

    用java 如何获得ip.rar_java如何获得

    `java.net.InetAddress`类是Java提供的核心类,用于处理Internet协议相关的地址。这个类提供了获取主机名、IP地址以及进行其他网络操作的方法。本篇文章将深入探讨如何使用`InetAddress`类来获取IP地址,并结合给定...

    用java获取IP地址

    本文将详细介绍如何利用Java标准库中的`java.net.InetAddress`类来实现这一目标。 #### 二、`InetAddress`类简介 `InetAddress`类位于`java.net`包中,它主要用于存储和操作IP地址。该类提供了一系列的方法来获取...

    JAVA UDPSocket代码

    1. **UDP套接字**: UDP套接字是Java中的`java.net.DatagramSocket`类,用于发送和接收UDP数据包。创建一个UDP Socket实例并不与远程主机建立连接,而是通过发送和接收`java.net.DatagramPacket`对象来完成通信。 2....

    JAVA_ Socket_UDP(客户端服务器)

    在Java中,我们可以使用`java.net.DatagramSocket`类来创建UDP套接字。对于客户端,我们首先创建一个DatagramSocket实例,然后准备数据并封装到`java.net.DatagramPacket`对象中,最后通过socket的`send()`方法将其...

    udp广播与接收服务端与客户端(java代码)

    在Java中,我们可以使用java.net包中的DatagramSocket类来实现UDP的发送和接收。以下将详细讲解如何构建一个UDP广播发送服务端以及接收客户端。 首先,我们来看服务端的实现。服务端的任务是向局域网内的所有设备...

    JAVA100例之实例51 数据报通讯:聊天吧

    在Java中,我们通常使用`java.net.DatagramSocket`类来创建发送和接收数据报的套接字,以及`java.net.DatagramPacket`类来封装和解封数据。 首先,我们需要创建一个`DatagramSocket`对象,这将绑定到特定的IP地址和...

    java网络编程代码

    在Java中,我们使用`java.net.DatagramSocket`类来创建UDP套接字,`java.net.DatagramPacket`来封装发送和接收的数据。以下是一个简单的UDP广播示例: ```java import java.net.DatagramPacket; import java.net....

Global site tag (gtag.js) - Google Analytics