1. 程式人生 > 其它 >快速上手Java網路程式設計(一)基礎介紹、URL類和InetAddress類

快速上手Java網路程式設計(一)基礎介紹、URL類和InetAddress類

技術標籤:Java網路程式設計網路java程式語言多執行緒

快速上手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地址