20175214 《Java程序設計》第11周學習總結

20175214 《Java程序設計》第11周學習總結


本週學習任務總結

一、根據《java2實用教程》和藍墨雲學習視頻學習第十三章;java

二、嘗試將課本重點內容用本身的話複述手打;git

三、輸入課本代碼並上傳碼雲;服務器

四、使用IDEA調試代碼;網絡


教材學習重點內容總結

13.1 URL類

  • URL類是java.net包中的一個重要的類,URL的實例封裝着一個統一資源定位符(Uniform Resource Locator),使用URL建立對象的應用程序稱做客戶端程序。
  • 一個URL對象一般包含最基本的三部分信息:協議、地址、資源。多線程

  • 13.1.1 URL的構造方法socket

    • URL類一般使用以下的構造方法建立一個URL對象:
    public URL(String spec) throws MalformedURLException
    public URL(String protocol, String host,String file) throws MalformedURLException
  • 13.1.2 讀取URL中的資源分佈式

    • URL對象調用InputStream openStream()方法能夠返回一個輸入流,該輸入流指向URL對象所包含的資源。經過該輸入流能夠將服務器上的資源讀入到客戶端。

13.2 InetAdress類

  • 13.2.1 地址的表示學習

    • Internet上的主機有兩種方式表示地址:
    1.域名
    例如 www.tsinghua.edu.cn
    2.IP地址
    例如 202.108.35.210
    java.net包中的InetAddress類對象含有一個Internet主機地址的域名和IP地址,例如 www.sina.com.cn/202.108.37.40 。
  • 13.2.2 獲取地址url

1.獲取Internet上主機的地址
可使用InetAddress類的靜態方法getByName(String s);
得到一個InetAddress對象,該對象含有主機地址的域名和IP地址,該對象用以下格式表示它包含的信息:www.sina.com.cn/202.108.37.40
2.獲取本地機的地址
咱們可使用InetAddress類的靜態方法getLocalHost()得到一個InetAddress對象,該對象含有本地機的域名和IP地址。

13.3 套接字

  • 13.3.1 套接字.net

    • IP地址標識Internet上的計算機,端口號標識正在計算機上運行的進程(程序)。端口號被規定爲一個16位的0~65535之間的整數。
    • 當兩個程序須要通訊時,它們能夠經過使用Socket類創建套接字對象並鏈接在一塊兒(端口號與IP地址的組合得出一個網絡套接字)。
  • 13.3.2 客戶端套接字

    • 客戶端的程序使用Socket類創建負責鏈接到服務器的套接字對象。
    • 創建鏈接到服務器的套接字對象:
    try{  Socket mysocket=new Socket(「http://192.168.0.78」,1880);
     }
    catch(IOException e)
    {}
    與mysocket相關的方法
    
    getInputStream()得到一個輸入流
    getOutputStream()得到一個輸出流
    • getInputStream()獲得的輸入流接到另外一個DataInputStream數據流上
    • getOutputStream()獲得的輸出流接到另外一個DataOutputStream數據流上
  • 13.3.3 ServerSocket對象與服務器端套接字

    • 服務器必須創建一個ServerSocket對象,該對象經過將客戶端的套接字對象和服務器端的一個套接字對象鏈接起來,從而達到鏈接的目的。
      創建ServerSocket對象:
    try22{  ServerSocket  serverForClient =new ServerSocket(2010);
    }
    catch(IOException e){}
    • 使用方法accept()將客戶的套接字和服務器端的套接字鏈接起來,代碼以下所示:
    try{  Socket sc= serverForClient .accept();
    }
    catch(IOException e){}
    • 所謂「接收」客戶的套接字鏈接就是accept()方法會返回一個和客戶端Socket對象相鏈接的Socket對象。

    • 客戶端的套接字得到的輸入\輸出流和服務器端的套接字得到的輸出\輸入流互相鏈接.

  • 13.3.4 使用多線程技術

    • 爲了防止堵塞線程,服務器端收到一個客戶的套接字後,就應該啓動一個專門爲該客戶服務的線程。
    • 在Example13_4中,客戶使用Socket類不帶參數的構造方法Socket()建立一個套接字對象,該對象需調用public void connect(SocketAddress endpoint) throws IOException請求和參數SocketAddress指定地址的套接字創建鏈接。
    • 爲了使用connect方法,可使用SocketAddress的子類InetSocketAddress建立一個對象,
      InetSocketAddress的構造方法是:
    InetSocketAddress(InetAddress addr, int port)

13.4 UDP數據報

  • 基於UDP的通訊和基於TCP的通訊不一樣,基於UDP的信息傳遞更快,但不提供可靠性保證。
  • 基於UDP通訊的基本模式是:

    • 1.將數據打包,稱爲數據包(比如將信件裝入信封同樣),而後將數據包發往目的地。
    • 2.接受別人發來的數據包(比如接收信封同樣),而後查看數據包中的內容。
  • 13.4.1 發送數據包

    • 1.用DatagramPacket類將數據打包,即用DatagramPacket類建立一個對象,稱爲數據包。用DatagramPacket的如下兩個構造方法建立待發送的數據包:
    DatagramPacket(byte data[],int length,InetAddtress address,int port)
    DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
    • 2.用DatagramSocket類的不帶參數的構造方法:DatagramSocket()建立一個對象,該對象負責發送數據包。例如:
    DatagramSocket mail_out=new DatagramSocket();
    mail_out.send(data_pack);
  • 13.4.2 接收數據包

    • 首先用DatagramSocket的另外一個構造方法DatagramSocket(int port) 建立一個對象,其中的參數必須和待接收的數據包的端口號相同。
    • 例如,若是發送方發送的數據包的端口是5666,那麼以下建立DatagramSocket對象:
    DatagramSocket mail_in=new DatagramSocket(5666);
    • 而後對象mail_in使用方法receive(DatagramPacket pack)接受數據包。
    • 用 DatagramPack類的另一個構造方法:DatagramPack(byte data[],int length)建立一個數據包,用於接收數據包,例如:
    byte data[]=new byte[100];
    int length=90;
    DatagramPacket pack=new DatagramPacket(data,length);
    mail_in.receive(pack);
    • 該數據包pack將接收長度是length字節的數據放入data。

13.5 廣播數據報

  • 廣播數據報涉及到地址和端口。
  • 廣播數據報是一種較新的技術,要廣播或接收廣播的主機都必須加入到同一個D類地址。

13.6 Java 遠程調用(RMI)

  • Java遠程調用,RMI(Remote Method Invocation)是一種分佈式技術,使用RMI可讓一個虛擬機(JVM)上的應用程序請求調用位於網絡上另外一處的JVM上的對象方法。習慣上稱發出調用請求的虛擬機(JVM)爲(本地)客戶機,稱接受並執行請求的虛擬機(JVM)爲(遠程)服務器。

  • 13.6.1 遠程對象及其代理

    • 1.遠程對象:駐留在(遠程)服務器上的對象是客戶要請求的對象,稱做遠程對象。
    • 2.代理與存根(Stub):
      • 代理的特色是它與遠程對象實現了相同的接口。
      • 存根(Stub):一種特殊的字節碼,並讓這個存根產生的對象爲做爲遠程對象的代理。
    • 3.Remote接口:
      • RMI爲了標識一個對象是遠程對象,便可以被客戶請求的對象,要求遠程對象必須實現java.rmi包中的Remote接口,也就是說只有實現該接口的類的實例才被RMI認爲是一個遠程對象。
  • 13.6.2 RMI的設計細節

    • 1.擴展Remote接口
      • 定義一個接口是java.rmi包中Remote的子接口,即擴展Remote接口。
    • 2.遠程對象
      • 建立遠程對象的類必需要實現Remote接口,RMI使用Remote接口來標識遠程對象,可是Remote中沒有方法,所以建立遠程對象的類須要實現Remote接口的一個子接口。
    • 3.存根(Stub)與代理:RMI使用rmic命令生成存根
    • 4.啓動註冊rmiregistry: 執行rimregistry命令
    • 5.啓動遠程對象服務:遠程服務器使用java.rmi包中的Naming類調用其類方法rebind(String name, Remote obj)綁定一個遠程對象到rmiregistry所管理的註冊表中,該方法的name參數是URL格式,obj參數是遠程對象,未來客戶端的代理會經過name 找到遠程對象obj。
    • 6.運行客戶端程序:遠程服務器啓動遠程對象服務後,客戶端就能夠運行有關程序,訪問使用遠程對象。

代碼託管

代碼託管

相關文章
相關標籤/搜索