• 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());
             }

  • 相关阅读:
    C#不显示在任务栏
    打开文件,文件夹
    C#文本操作
    C#路径2
    C#当前程序路径获取
    HDU 5155 Harry And Magic Box dp
    POJ 1971 Parallelogram Counting
    CodeForces 479C Exams 贪心
    CodeForces 508E Arthur and Brackets 贪心
    CodeForces 483B 二分答案
  • 原文地址:https://www.cnblogs.com/Downtime/p/7827502.html
Copyright © 2020-2023  润新知