快速上手Java網路程式設計(一)基礎介紹、URL類和InetAddress類
快速上手Java網路程式設計(一)基礎介紹、URL類和InetAddress類
最近在學Java網路程式設計,裡面涉及到的一些概念比較容易搞混,於是決定寫部落格記錄整理一下,方便日後複習,如有發現錯誤之處,還請在評論區指正。
一、 前置知識
(1)Java基本語法
(2)需要對Java輸入輸出流有基本的認識(其實不懂也能看得懂)
(3)瞭解Java的多執行緒機制
(4)對計算機網路(計算機之間的通訊)有基本的認識(最起碼知道啥是IP地址,用來幹啥的)
二、URL類和InetAddress類
1、URL類
URL想必大家都十分熟悉,你在瀏覽器中輸入的連結就可以看做是一個URL,它的全稱叫做統一資源定位符
首先來看它最常用的一個構造方法:
try{
URL url = new URL("https://www.baidu.com");
}
catch(MalformedURLException e){
System.out.println("Bad URL:" + url);
}
注意:URL類物件的初始化是需要放在一個try-catch語句中的,因為初始化可能無法完成,比如你輸入一個不存在的url作為構造引數。
接下來將通過URL類進行一次演示,這裡將用到Java執行緒的知識:我們知道,程式碼在程式中是順序執行的,當我們請求網路上的一個資源後,自然要準備接受我們所請求的資源。但有時候我們所請求的資源等了半天都不過來(比如出現網路故障),如果這時我們繼續採用順序執行程式的思想,程式將會卡在接受資源的程式碼處,停滯不前,直到程式接收到所請求的資源,才會繼續向下執行程式的其它部分。
這樣就會導致很多問題,比如一個聊天軟體,如果採用順序的思想,就會出現如下情形:你必須先接收到別人發給你的訊息然後才能給對方發訊息,如果接收不到對方的訊息,程式將會一直卡在那,這樣的程式是沒人用的。因此,在Java網路程式設計中,我們通常會將資源的接收單獨放在一個執行緒裡,這樣就不會產生衝突。
import java.net.*;
import java.util.*;
public class Exam_1 {
public static void main(String[] args) {
Scanner scanner;
URL url;
Thread readURL;
Look look = new Look();
System.out.println("輸入URL資源");
scanner = new Scanner(System.in);
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.getStackTrace());
}
}
}
/*--------------------------分割線-------------------------------------*/
import java.net.*;
import java.io.*;
public class Look implements Runnable{
URL url;
public void setUrl(URL url) {
this.url = url;
}
@Override
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)
{
}
}
}
執行如上程式碼將會打印出所請求頁面的html內容。
2、InetAddress類
可以看做是InetnetAddress的縮寫,即網路地址,而網路地址常見表示方式有兩種,域名和IP地址,注意,這裡說的是表示方式,即域名和IP地址都是一個主機網路地址的一部分。
(1)獲取一個普通的InetAddress類物件
使用該類的靜態方法
InetAddress address = InetAddress.getByName(String s);
這裡的s引數可以為域名,也可以是一個IP地址。
(2)獲取代表本地網路地址的一個InetAddress物件
InetAddress address = InetAddress.getLocalHost();
(3)該類的其他方法
- public String getHostName() 獲取當前物件的域名
- public String getHostAddress() 獲取當前物件的IP地址