zoukankan      html  css  js  c++  java
  • Java常见网络操作(URL类,InetAddress类,URLConnection类)

    *****************InetAddress**********************

        InetAddress:用于标识网络上的硬件资源(如,IP,主机名,域名等)。
        对于InetAddress,三个方法:getLocalHost()、getByName()以及getAllByName()可以用来创建InetAddress的实例。
     InetAddress类没有提供返回构造函数,所以不能用new()方法来创建它的对象,而只可以调用静态方法getLocalHost()、getByName()、getByAddress()等来生成InetAddress类的实质。


    1、InetAddress常用方法:
    1.InetAddress.getLocalHost()仅返回象征本地主机的InetAddress对象。(返回的是本地地址)
        本机地址还为localhost,127.0.0.1,这三个地址都是一回事。
    例,InetAddress.getLocalHost();//Lenovo-PC/169.254.193.131

    2.getByName()方法返回一个传给它的主机名的InetAddress。
      如果这些方法不能解析主机名,它们引发一个UnknownHostException异常。
      在Internet上,用一个名称来代表多个机器是常有的事。
    例,InetAddress.getByName("www.baidu.com");//www.baidu.com/61.135.169.121

    3.getAllByName()方法返回代表由一个特殊名称分解的所有地址的InetAddresses类数组。
        getAllByName()方法是根据主机名返回其可能的所有InetAddress对象,保存在一个数组中
      在不能把名称分解成至少一个地址时,它将引发一个UnknownHostException异常。

    4.getLoopbackAddress()方法返回本地环回地址
    例,InetAddress.getLoopbackAddress();//localhost/127.0.0.1

    5.查看端口是否已使用
    Socket socket = new Socket(Address,port);#address代表主机的IP地址,port代表端口号.
    如果对该主机的特定端口号能建立一个socket,则说明该主机的该端口在使用。
    例,import java.net.*;

     for (int i = 500; i < 1024; i++) {
                 try {
                    System.out.println("查看 端口"+ i);
                    Socket skt = new Socket("localhost", i);
                    System.out.println("端口 " + i + " 已被使用");
                 }
                 catch (UnknownHostException e) {
                    System.out.println("Exception occured"+ e);
                    break;
                 }
                 catch (IOException e) {

                    System.out.println("端口"+i+"未被使用");
                 }
              }

    补充:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
    建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
    IP+端口号就是所谓的Socket!!!

      在JAVA中,Java.net包里面的类是进行网络编程的,其中java.net.URL类和java.net.URLConection类使编程者方便地利用URL在Internet上进行网络通信。



    ********************URL类******************************

    URL:通过URL类可以直接读取或写入网络上的资源。
    1.URL可以分为如下几个部分:
        protocol://host:port/path?query#fragment

    例,http://www.runoob.com/index.html?language=cn#j2se
    URL 解析:
        协议为(protocol):http
        主机为(host:port):www.runoob.com
        端口号为(port): 80 ,以上URL实例并未指定端口,因为 HTTP 协议默认的端口号为 80。
        文件路径为(path):/index.html
        请求参数(query):language=cn
        定位位置(fragment):j2se,定位到网页中 id 属性为 j2se 的 HTML 元素位置 。


    2.URL类的使用:
    例,
    URL url=new URL("http://www.runoob.com/wp-content/themes/runoob/assets/img/newlogo.png");
    注意:必须用完整的域名(例,http://www.baidu.com/),不能(例,www.baidu.com/)这样会报错!


      2.1获取URL对象的属性
      getDefaultPort(): 返回默认的端口号。
      getFile(): 获得URL指定资源的完整文件名。
      getHost(): 返回主机名。
      getPath(): 返回指定资源的文件目录和文件名。
      getPort(): 返回端口号,默认为-1。
      getProtocol(): 返回表示URL中协议的字符串对象。
      getRef(): 返回URL中的HTML文档标记,即#号标记。
      getUserInfo: 返回用户信息。
      toString: 返回完整的URL字符串。
    例,
        URL url=new URL("http://www.runoob.com/wp-content/themes/runoob/assets/img/newlogo.png");
        System.out.println(url.getDefaultPort());//80
        System.out.println(url.getFile());//wp-content/themes/runoob/assets/img/newlogo.png
        System.out.println(url.getHost());//www.runoob.com
        System.out.println(url.getPath());///wp-content/themes/runoob/assets/img/newlogo.png
        System.out.println(url.getPort());//-1,因为创建URL实例的时候没有指定端口号
        System.out.println(url.getProtocol());//http
        System.out.println(url.getRef());//null
        System.out.println(url.getUserInfo());//null
        System.out.println(url.toString());//http://www.runoob.com/wp-content/themes/runoob/assets/img/newlogo.png



    ****************URLConnection类**********************

    URLConnection 类是一个抽象类,代表应用程序和URL之间的通信连接,此类的实例可用于读取和写入此URL引用的资源。
    URLConnection 允许使用GET,POST或者其他HTTP方法请求方式将请求数据发送到服务器。

        有两种方法可以用来访问Internet。一是利用URL类的openStream()方法;二是使用openConnection()方法创建一个URLConnection类的对象。
      其中,方法openStream()与指定的URL建立连接并返回InputStream类的对象,以从这一连接中读取数据。

    例,(简单的网页爬取)方法一:openStream()

    openStream()方法可以得到指定资源的输入流,通过输入流可以读取,访问网络上的资源。
            URL url=new URL("http://www.cnblogs.com/Downtime/p/7822379.html");
            InputStream conn=url.openStream();//得到字节输入流
            InputStreamReader read=new InputStreamReader(conn,"utf-8");//将字节输入流转换为字符输入流
            BufferedReader bread=new BufferedReader(read);//将字符输入流添加到缓存中
            while(bread.readLine() != null){
                System.out.println(bread.readLine());
            }
            conn.close();

    方法二:URLConnection
            URL url=new URL("http://www.cnblogs.com/Downtime/p/7822379.html");
            URLConnection conn=url.openConnection();
            InputStream in=conn.getInputStream();
            InputStreamReader read=new InputStreamReader(in,"utf-8");
            BufferedReader reader=new BufferedReader(read);
            while(reader.readLine() != null ){
                System.out.println(reader.readLine());
            }
            conn.getInputStream().close();

    2.常用方法:
    URLConnection 方法列表如下:
    1、    Object getContent()
    检索URL链接内容
    2、    Object getContent(Class[] classes)
    检索URL链接内容
    3、    String getContentEncoding()
    返回头部 content-encoding 字段值。
    4、    int getContentLength()
    返回头部 content-length字段值
    5、    String getContentType()
    返回头部 content-type 字段值
    6、    int getLastModified()
    返回头部 last-modified 字段值。
    7、    long getExpiration()
    返回头部 expires 字段值。
    8、    long getIfModifiedSince()
    返回对象的 ifModifiedSince 字段值。
    9、    public void setDoInput(boolean input)
    URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
    10、    public void setDoOutput(boolean output)
    URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
    11、    public InputStream getInputStream() throws IOException
    返回URL的输入流,用于读取资源
    12、    public OutputStream getOutputStream() throws IOException
    返回URL的输出流, 用于写入资源。
    13、    public URL getURL()
    返回 URLConnection 对象连接的URL

     14.getHeaderField(int n)    返回String

    返回第 n 个头字段的值。

    15.getHeaderField(String name)   返回String

    返回指定的头字段的值。

    16.getHeaderFields()     返回Map类型

    返回所有url响应头信息。

    例,

    URL url=new URL("http://www.runoob.com/");
             URLConnection conn=url.openConnection();
             Map headers=conn.getHeaderFields();
             Set set=headers.entrySet();
             Iterator it=set.iterator();
             while(it.hasNext()){
                 Map.Entry en=(Entry<String, String>) it.next();
                 System.out.println(en.getKey()+":"+en.getValue());
             }

  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/Downtime/p/7827502.html
Copyright © 2011-2022 走看看