用JAVA实现InetAddress

    InetAddress类:用于标识网络上的硬件资源,表示互联网协议(ip)地址,是java对ip地址的封装。其实例对象包含以数字形式保存的IP地址,主机名。InetAddress类提供了将主机名解析为IP地址(或反之)的方法。
    
1 InetAddress对象的获取
InetAddress的构造函数不是公开的(public),所以需要通过它提供的静态方法来获取,有以下的方法:

static InetAddress[] getAllByName(String host)

工厂方法返回代表由一个特殊名称分解的所有地址的InetAddresses类数组。

static InetAddress getByAddress(byte[] addr)

返回给定的原始IP地址InetAddress对象

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

返回给定的主机名和原始IP地址InetAddress对象

static InetAddress getByName(String host)

返回一个传给它的主机名的InetAddress。

static InetAddress getLocalHost()

仅返回象征本地主机的InetAddress对象。

若访问本地地址则用getLocalHost()方法,比较常用的是getByName(String host)方法,只需要传入目标主机的名字,InetAddress会尝试做连接DNS服务器,并且获取IP地址的操作
如:

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

2.获取 InetAddress对象属性
如:
getHostName() 获得主机名
getHostAddress() 获得IP地址

用JAVA实现URL
   URL:统一资源定位符,通过URL可直接读取/写入网络上的数据,是Internet上某一资源的定位符。通过一个URL连接,我们就可以确定资源的位置,比如网络文件、网络页面以及网络应用程序等。
   如下URL连接:
  http://www.mycompany.com:8080/mywebapps/AWebApp

  这个连接规定使用http协议。主机名称为www.mycompany.com。端口号为8080。这个URL的其它部分, /mywebapps/AwebApp,则确定了我们要在这个站点上所要访问的资源。在这个例子中的资源恰好是一个网络应用程序。而且,URL还可以包含其它的元素,比如说文件段以及查询信息等等。

1、创建URL对象
  URL类有多种形式的构造函数:
(1) URL ( String url)
  //url代表一个绝对地址,URL对象直接指向这个资源,如:
  URL urll=new URL(http://www.cqwu.edu.cn);

(2) URL ( URL baseURL , String relativeURL)
 // 其中,baseURL代表绝对地址,relativeURL代表相对地址。如:
  URL urll=new URL(http://www.cqwu.edu.cn);
  URL url=new URL(urll , “/index.html? username=tom#test”);
?号后表示参数,#后表示锚点
(3) URL ( String protocol , String host , String file)
  //其中,protocol代表通信协议,host代表主机名,file代表文件名。如:
  new URL (“http” , www.cqwu.edu.cn, “/ test / test.asp);

(4) URL ( String protocol , String host , int port , String file)
  URL lib = new URL (“http” , www.cqwu.edu.cn, 80 , “/ test / test.asp”);

2.URL连接
成功的创建了一个URL 对象后,就可以对其进行操作。但是在访问这个URL上的资源和内容之前,必须要打开到这些资源与内容上的连接->通过使用openConnection方法来完成这一操作。
用法如下:

URL url = new URL("http://www.baidu.com.cn");
        URLConnection urlcon = url.openConnection();
        urlconn.connect();//获取连接
连接成功后,就可以开始对这个URLConnection的输入以及输出流进行读和写的操作了。

3. 从URL 连接中读取数据
方法1:通过openConnection()方法建URLConnection类对象
 成功连接后,就可以获得针对这个连接的输入流并且对其进行读操作。URL可以代表很多不同种类的数据类型所组成的资源。java.io classes可以对文件流或者socket流进行操作方式同样可以对从URLConnection流返回的数据进行读操作。

URL url = new URL("http://www.baidu.com.cn");
   URLConnection urlcon = url.openConnection();
   urlconn.connect();//获取连接 
   //打开连接读取的输入流。      
   InputStream is = urlcon.getInputStream();
   int c; 
   //进行读操作     
      while ((c = is.read()) != -1)        
          System.out.print(c); 
   //关闭输入流   
   in.close();
方法2:通过URL类的openStream()方法
URL url =new    URL("http://music.163.com/#/user/home?id=1");        

    //打开URL连接并返回一个用于从该连接读入的InputStream字节输入流。        
    InputStream is = url.openStream();     
    //将字节输入流转换为字符输入流
    InputStreamReader isr = new InputStreamReader(is);
    //为字符输入流添加缓冲,提高效率
    BufferedReader bfr = new  BufferedReader (isr);
    //读取数据
    String data = bfr.readline();     
    while (data!=null) {        
        System.out.printf(data);
        data = bfr.readline();     
    }    
    bfr.close();
    isr.close();
    is.close();

4.对URL进行写的操作

  使用java.io stream classes对URL进行写的操作:成功连接后,就可以得到来自此连接的输出流并且开始进行写的操作。在获得并对URLConnection流进行写的操作之前,还需要使用setDoOutput(boolean)方式把输出(Output)属性设置为真(true)来指定可以进行写操作的那些连接。Java.io classes允许你把数据写到URLConnection流,这个操作也和你对文件流和socket流进行的写操作一样。

5.获取URL对象的属性
  getDefaultPort(): 返回默认的端口号。
  getFile(): 获得URL指定资源的完整文件名。
  getHost(): 返回主机名。
  getPath(): 返回指定资源的文件目录和文件名。
  getPort(): 返回端口号,默认为-1。
  getProtocol(): 返回表示URL中协议的字符串对象。
  getRef(): 返回URL中的HTML文档标记,即#号标记。
  getUserInfo: 返回用户信息。
  toString: 返回完整的URL字符串。