Java网络编程之URL类创建客户端程序、InetAddress类获取域名IP

大家好,我是柒星

今天讲解Java网络编程之URL类、InetAddress类,在讲之前呢,大家有必要了解什么是网络编程?(因为我一向推崇大家学习的时候先了解你要学的东西有哪些作用,是用来干什么的,这样你才有目的有意义的去学习。否则意义不大~)
以下文章来自公众号【Honker】,公众号内回复Java可免费领取Java学习视频~

在这里插入图片描述
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。

当你知道了这个概念,你就能明白,网络编程的重要性了吧,因为我们身边的各种APP,都是需要用到网络编程的。
No.1

URL类

URL类是java.net包中的一个重要的类,使用URL创建对象的应用程序称为客户端程序。

一个URL对象封装这一个具体的资源的引用,表明客户要访问这个URL中的资源,客户利用URL对象可以获取URL中的资源。一个URL对象通常包含最基本的三部分信息:

协议

地址

资源

协议必须是URL对象所在的Java虚拟机支持的协议,许多协议并不是我们常用的,虚拟机支持的常用协议有Http、Ftp、File。

地址必须是能连接的有效IP地址或域名。

资源可以是主机上的任何一个文件。
在这里插入图片描述
URL的构造方法

URL通常使用public URL(String str) throws MalformedURLException 构造方法去创建一个对象。该构造方法使用字符串初始化一个URL对象:


try{
    URL url = new URL("http://www.baidu.com");
}catch(MalformedURLException e) {
    System.out.println("Bad URL:"+url);
}

上述url对象中使用的协议是http协议,即用户按着这种协议和指定的服务器通信,url对象包含的地址是www.baidu.com,所包含的资源是默认的资源(百度首页)。

除了上述构造方法之外,还有以下几种构造方法

public URL(String protocol, String host, String file) throws MalformedURLException
使用指定的协议、主机名、文件名创建URL,端口使用协议的默认端口。

public URL(String protocol, String host, int port, String file) throws MalformedURLException.
通过给定的参数(协议、主机名、端口号、文件名)创建URL。

public URL(URL context, String url) throws MalformedURLException
使用基地址和相对URL创建

URL类中包含了很多方法用于访问URL的各个部分,具体方法及描述如下:


public String getPath()
返回URL路径部分。

public String getQuery()
返回URL查询部分。

public String getAuthority()
获取此 URL 的授权部分。

public int getPort()
返回URL端口部分

public int getDefaultPort()
返回协议的默认端口号。

public String getProtocol()
返回URL的协议

public String getHost()
返回URL的主机

public String getFile()
返回URL文件名部分

public String getRef()
获取此 URL 的锚点(也称为"引用")

public URLConnection openConnection() throws IOException
打开一个URL连接,并运行客户端访问资源。

在这里插入图片描述
读取URL中的资源

URL对象调用InputStream openStream() 方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源信息读入到客户端。

下面给出一个例子:


import java.net.*;
import java.io.*;
import java.util.*;
public class Main(){
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        URL url;
        Thread readURL;         //读取资源的线程
        Look look = new Look(); //线程的目标对象
        System.out.println("输入URL资源,例如:http://www.baidu.com");
        String source = scanner.nextLine();
        try{
            url = new URL(source);
            look.setURL(url);
            readURL = new Thread(look);
            readURL.start();          
        }catch(Exception e){
            System.out.println(e);
        }
    }
}
class Look implements Runnable {
    URL url;
    public void setURL(URL url){
        this.url = url;
    }
    public void run(){
        try{
            InputStream in = url.openStream();
            byte[] b = new byte[1024];
            int n = -1;
            while((n=in.read(b))!=-1) {
                 String str = new String(b,0,n);
                 System.out.println(str);   
            }
        }catch(IOException e) {}
    }
}

上述例子,用户在窗口输入网址,读取服务器资源,由于网络速度或其他的因素,URL资源的读取可能会引起阻塞,因此,程序需在一个线程中读取URL资源,以免阻塞主线程。
在这里插入图片描述
No.2

InetAddress类

地址的表示

主机的两种方式表示地址:

域名 例:www.baidu.com

IP地址 例:202.108.34.253

java.net包中的InetAddress类对象含有一个Internet主机地址的域名和IP地址。如:www.baidu.com/14.215.177.39

域名容易记忆,在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化成IP地址,这样才能和主机建立连接。

在这里插入图片描述
获取地址

获取网上主机的地址,通过一个域名获取主机IP

可以使用该类中的一个静态方法getByName(String s)将一个域名或IP地址传给该方法参数s,获取一个InetAddress对象,该对象含有主机地址的域名和IP地址,该对象用如下格式表示:www.baidu.com/14.215.177.39

下面请看实例:


import java.net.*;

public class InetAddress_test {
    public static void main (String[] args){
        try{
            InetAddress address = InetAddress.getByName("43.240.31.62");
            System.out.println(address.toString());
        }catch(UnknownHostException e){
            System.out.println("无法找到地址");
        }
        try{
            InetAddress address = InetAddress.getByName("www.baidu.com");
            System.out.println(address.toString());
        }catch (UnknownHostException e){
            System.out.println("无法找到地址");
        }
    }
}

运行以上程序需保证程序所在的计算机已经连到Internet上。

InetAddress类的其他方法:


static InetAddress getByAddress(byte[] addr)
在给定原始 IP 地址的情况下,返回 InetAddress 对象。

static InetAddress getByAddress(String host, byte[] addr)
根据提供的主机名和 IP 地址创建 InetAddress。

String getHostAddress() 
返回 IP 地址字符串(以文本表现形式)。

String getHostName() 
 获取此 IP 地址的主机名。
 
static InetAddress getLocalHost()
返回本地主机。

String toString()
将此 IP 地址转换为 String。

到这里,此篇文章就结束啦,关于网络编程的知识还有很多,例如,Socket 类、

ServerSocket 类等等一些重要知识。喜欢就关注我吧,我们下期再见~

发布了30 篇原创文章 · 获赞 16 · 访问量 3109

猜你喜欢

转载自blog.csdn.net/weixin_43729943/article/details/103773042