Java基礎(37)——網絡編程相關知識詳解及示例分析四(InetAddress類、URL類及示例詳解)


版權聲明

  • 本文原創作者:清風不渡
  • 博客地址:https://blog.csdn.net/WXKKang

  在之前幾篇我們對於計算機網絡這個概念進行了學習之後,我想大家對於這個概念已經不陌生了,那麼,這一篇我們就來學習如何利用Java語言實現網絡編程,實質上Java網絡編程就是實現局域網與互聯網之間的數據通信

一、網絡API

1、基礎知識

  在Java中,與網絡相關的API定義在java.net包中,如下:
在這裏插入圖片描述

2、IP編程

  對比上面的API表,如果我們要進行IP編程,那麼我們需要使用到的類爲:InetAddress
  InetAddress用來提供網絡資源的抽象表示,並且提供了一系列方法來描述、獲取及使用網絡資源,下面我們來看它的API

(1)InetAddress

  InetAddress不能使用new來構造InetAddress實例,而是通過靜態方法來獲取,這些方法可能會產生UnknownHostException異常,其主要方法如下表所示:
在這裏插入圖片描述

(2)示例分析

  下面我們就來使用一下InetAddress它的主要方法,代碼如下:

package qfbd.com;
/*
原創作者:清風不渡
博客地址:https://blog.csdn.net/WXKKang
*/
import java.net.InetAddress;

public class Demo {

	public static void main(String[] args) throws Exception {
		//獲取本機InetAddress對象
		InetAddress localHost = InetAddress.getLocalHost();
		//獲取本機名
		String hostName = localHost.getHostName();
		System.out.println("對象機器名爲:"+hostName);
		//獲取本機IP地址
		String hostAddress = localHost.getHostAddress();
		System.out.println("對象IP地址爲:"+hostAddress);
	}
}

  執行結果如下:
在這裏插入圖片描述
  那麼,依照上面的方法我們只能獲取到本機的InetAddress對象,那麼我們是否可以獲取到其他主機的InetAddress對象呢,當然可以的,方法如下:

package qfbd.com;
/*
原創作者:清風不渡
博客地址:https://blog.csdn.net/WXKKang
*/
import java.net.InetAddress;

public class Demo {

	public static void main(String[] args) throws Exception {
		//根據主機名獲取其對應的InetAddress對象
		InetAddress address1 = InetAddress.getByName("DESKTOP-0CROJ1F");
		//根據IP地址獲取其對應的InetAddress對象
		//InetAddress address2 = InetAddress.getByName("192.168.1.166");
		String hostName = address1.getHostName();
		String hostAddress = address1.getHostAddress();
		System.out.println("hostName:"+hostName+",hostAddress:"+hostAddress);
	}
}

  執行結果如下:
在這裏插入圖片描述
  需要注意的是如果找不到該主機名或IP地址則會報UnknownHostException異常,如下圖所示:
在這裏插入圖片描述

3、應用層編程

  URL是統一資源定位符( Uniform Resource Locator) 的簡稱,它表示Internet上某一資源的地址。Internet上的資源包括HTML文件、圖象文件、聲音文件、動畫文件以及其他任何內容( 如數據庫查詢等)。

(1)URL格式

   URL是統一資源定位符(Uniform Resource Locator)的簡稱,表示Internet上某一資源的地址。它包括協議名稱和資源名稱( Protocol:resourceName),中間用冒號隔開。例如:https://www.baidu.com/
  協議名稱是獲取資源時使用的應用協議,如http、ftp、file等,資源名稱則是資源的完整地址,包括主機名、端口號、文件名,或一個內部應用

(1)URL編程及步驟

   Java程序通過URL可以訪問Internet,瀏覽器或其他程序通過解析給定的URL就可以在網絡上查找相應資源

A、構造URL對象

   在java.net包中提供了URL類來表示URL,它提供了很多構造方法來創建URL對象,例如:

URL url1 = new URL(“https://blog.csdn.net/WXKKang”);

   當創建URL時發生錯誤會產生MalformedURLException,必須在程序中捕獲處理

B、獲取各個參數

   URL對象生成後,其屬性是不能被改變的,但是可以通過給定方法來獲取這些屬性,方法及示例如下:

package qfbd.com;
/*
原創作者:清風不渡
博客地址:https://blog.csdn.net/WXKKang
*/
import java.net.URL;

public class Demo {

	public static void main(String[] args) throws Exception {
		//獲取URL對象
		URL url = new URL("https://blog.csdn.net/WXKKang");
		//獲取該URL的協議名
		System.out.println("協議名:"+url.getProtocol());
		//獲取該URL的主機名
		System.out.println("主機名:"+url.getHost());
		//獲取該URL的端口號,如果URL沒有指定端口則返回-1
		System.out.println("端口號:"+url.getPort());
	}
}
C、獲得URL指向的資源

   通過openStream()方法讀取一個URL所指定的資源。通過建立連接並返回InputStream,就可以讀取資源中的數據了。主要方法::

public final InputStream openStream( )

   通過上面所講述的方法,我們可以把百度頁面的資源通過IO流讀寫進我們本地的文件,示例如下:

package qfbd.com;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/*
原創作者:清風不渡
博客地址:https://blog.csdn.net/WXKKang
*/
import java.net.URL;

public class Demo {

	public static void main(String[] args) throws Exception {
		//獲取URL對象
		URL url = new URL("https://www.baidu.com");
		//獲取流對象
		InputStream openStream = url.openStream();
		OutputStream outputStream = new FileOutputStream("D:\\demo.html");
		int len = 0;
		while((len=openStream.read())!=-1){
			outputStream.write(len);
		}
		//關閉流,釋放資源
		openStream.close();
		outputStream.close();
		System.out.println("數據讀寫完畢!!!");
	}
}

   執行結果如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章