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("數據讀寫完畢!!!");
}
}
執行結果如下: