《JAVA程序設計》_第十一週學習總結

1、學習內容

13.1 URL類

  • URL類是java.net包中的一個重要的類,URL的實例封裝着一個統一資源定位符,使用URL建立對象的應用程序稱做客戶端程序。java

  • 一個URL對象包含的三個基本信息:協議、地址和資源。
    • 協議:必須是URL對象所在的Java虛擬機支持的協議,經常使用的有:Http、Ftp、File協議,由參數protocol指定。
    • 地址:必須是能鏈接的有效IP地址或域名,由參數host指定。
    • 資源:能夠是主機上的任何一個文件,由參數file指定。
  • 構造方法git

public URL (String spec) throws MalformedURLException//所包含的資源位默認的資源(主頁)
public URL(String protocol,String host,String file) throws MalformedURLException//protocol指定協議,host指定地址,file指定資源
  • 讀取URL中的資源:調用InputStream openStream()方法返回一個輸入流。

13.2 InetAdress類

  • 地址的表示:域名和IP地址編程

  • 獲取Internet上主機的地址:使用InetAddress類的靜態方法getByName(String s)將一個域名或 IP 地址傳遞給該方法的參數 S,得到一個 InetAddress 對象;public String getHostName()獲取InetAddress對象所含的域;public String getHostAddress()獲取InetAddress對象所含的IP地址。
  • 獲取本地機的地址:可使用InetAddress類的靜態方法getLocalHost()得到一個InetAddress對象,該對象含有本地機的域名和IP地址。服務器

13.3 套接字

  • 當兩個程序須要通訊時,它們能夠經過使用Socket類創建套接字對象並鏈接在一塊兒(端口號和IP地址的組合得出一個網絡套接字)。網絡

  • Socket類的構造方法:Socket(String host, int port),參數host是服務器的IP地址,port是端口號。分佈式

//創建鏈接到服務器的套接字對象
try { Socket clientSocket = new Socket("http://192.168.0.78",2010);
}  //(IP,端口號)
catch(IOException e) {}
ServerSocket 的構造方法:
ServerSocket(int port)
//其中port 是一個端口號。
  • 可使用方法accept()將客戶端的套接字和服務器端的套接字鏈接起來。
//創建ServerSocket對象
try{ ServerSocket serverForClient = new ServerSocket(2010);
}//(端口號)
catch(IOException e) {}


//使用accept()方法將客戶端和服務器端套接字鏈接起來
try{ Socket sc = serverForClient.accept();
}
catch(IOException e) {}
  • 從套接字鏈接中讀取數據與從文件中讀取數據有着很大的不一樣,從文件中讀取數據時,全部的數據都已經在文件中了,而使用套接字鏈接時,可能在另外一端數據發送以前,就已經開始讀取了。學習

  • 注意:accept方法會阻塞線程的執行,直到接收到客戶的呼叫。測試

  • 套接字通訊基本原則:服務器應當啓動一個專門的線程,在該線程中和客戶的套接字創建鏈接。因爲套接字的輸入流在讀取信息時可能發生阻塞,客戶端和服務器端都須要在一個單獨的線程中讀取信息。url

13.4 UDP數據報

  • 套接字是基於TCP協議的網絡通訊。.net

  • UDP的信息傳遞更快,但不提供可靠性保障,即沒法知道數據可否正確到達目的地,也不能肯定數據到達目的地的順序是否和發送的順序相同。

  • 基於UDP通訊的基本模式:
    • 將數據打包,稱爲數據包(比如將信件裝入信封同樣),而後將數據包發往目的地。
    • 接受別人發來的數據包(比如接收信封同樣),而後查看數據包中的內容。
    • 發送數據包
  • 用DatagramPacket的如下兩個構造方法建立待發送的數據包:

DatagramPacket(byte data[],int length,InetAddtress address,int port)
DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
  • 用DatagramSocket類的不帶參數的構造方法接收數據包
  • 用DatagramSocket(int port)建立對象,其中參數必須與待接收的數據包的端口號相同。
  • 方法receive(DatagramPacket pack)負責接收數據包。

13.5 廣播數據報

  • A類地址:a<128,則b.c.d表示主機。
  • B類地址:128<=a<192,則a.b表示網絡地址,c.d表示主機地址。
  • C類地址:a>=192,a.b.c表示網絡地址,d表示主機地址。
  • D類地址:224.0.0.0~224.255.255.255是保留地址
  • 要廣播或接收廣播的主機都必須加入到同一個D類地址。

  • D類地址不是用來你表明位置的,即在網絡上不能使用D類地址去查找計算機。

13.6 Java遠程調用

  • RMI是一種分佈式技術,使用RMI可讓一個虛擬機上的應用程序請求調用位於網絡上另外一處虛擬機上的對象。

  • 代理的特色是它與遠程對象實現了相同的接口。

  • 存根是一種特殊的字節碼,並讓這個存根產生的對象做爲遠程對象的代理,其字節碼後綴爲"_Stub"。

  • 遠程對象必須實現java.rmi包中的Remote接口。

  • 代理的特色是它與遠程對象實現了相同的接口

  • RMI的設計細節
    • 擴展Remote接口
    • 建立遠程對象
    • RMI使用rmic命令生成存根
    • 啓動註冊rimregistry
    • 啓動遠程對象服務
    • 運行客戶端程序

2、本週學習過程遇到的問題及總結

問題1:課上測試的gmssl庫的使用,我在安裝配置時,出現了以下問題:

解決1:在終端輸入

ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

問題2:感受在一臺機器上鍊接沒什麼用,嘗試在兩臺電腦上使用套接字鏈接服務器

實現2:剛開始一直連不上,後來發現端口要設置成一個1024以上的自定義端口,ip要設置成對方電腦的ip4地址

鏈接成功~

3、學習總結

  • 本週的內容是網絡編程,由於以前有必定的計網基礎,因此理解起來不算太困難,書上的例子運行起來也沒什麼問題,但對網絡編程的理解仍是不夠,對其應用也知之甚少,以後會對其進行鞏固。
  • 碼雲連接
相關文章
相關標籤/搜索