標籤:發送 get 3.4 資料打包 nec 網域名稱 receive public idea
20165318 2017-2018-2 《Java程式設計》第九周學習總結
目錄
- 學習過程遇到的問題及總結
- 教材學習內容總結
- 代碼託管
- 代碼統計
學習過程遇到的問題及總結
- Q1:運行課本例子4時,代碼中為漢字,但同樣的輸出的字元為亂碼。
解決方案:檢查後發現,使用的編碼方式不一致,其他源檔案使用的是GBK,而啟動並執行Client4使用的是UTF-8,將這個源檔案也改為GBK編碼,就可以正確運行了。
Q2:運行課本例子4後又運行例子3時,提示以下問題。
解決方案:我猜測可能是啟動並執行例子4堵塞了進程,於是就將前面所有的運行程式都關掉,之後就可以正常運行例子3了。
Q3:運行Java遠程調用的相關例子時,出現以下錯誤
解決方案:IDEA中提示應該將所有類都方法sever包中,但我放進去之後還是不能正常編譯,後來我嘗試將ClientApplication類也放在sever包中,就可以正常運行了。
返回目錄
教材學習內容總結
第13章 Java網路編程13.1 URL類
URL類是java.net包中的一個重要的類,URL的執行個體封裝著一個統一資源定位器,使用URL建立對象的應用程式稱作用戶端程式。
一個URL對象包含的三個基本資料:協議、地址和資源。
- 協議:必須是URL對象所在的Java虛擬機器支援的協議,常用的有:Http、Ftp、File協議,由參數protocol指定。
- 地址:必須是能串連的有效IP地址或網域名稱,由參數host指定。
- 資源:可以是主機上的任何一個檔案,由參數file指定。
構造方法
public URL (String spec) throws MalformedURLExceptionpublic URL(String protocol,String host,String file) throws MalformedURLException
讀取URL中的資源:調用InputStream openStream()方法返回一個輸入資料流。
13.2 InetAdress類
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 是一個連接埠號碼。
//建立ServerSocket對象try{ ServerSocket serverForClient = new ServerSocket(2010);}//(連接埠號碼)catch(IOException e) {}//使用accept()方法將用戶端和伺服器端通訊端串連起來try{ Socket sc = serverForClient.accept();}catch(IOException e) {
可以使用方法accept()將用戶端的通訊端和伺服器端的通訊端串連起來。
從通訊端串連中讀取資料與從檔案中讀取資料有著很大的不同,從檔案中讀取資料時,所有的資料都已經在檔案中了,而使用通訊端串連時,可能在另一端資料發送之前,就已經開始讀取了。
注意:accept方法也會阻塞線程的執行,直到接收到客戶的呼叫。
使用多線程技術
- 為了防止堵塞線程,伺服器端收到一個客戶的通訊端後,就應該啟動一個專門為該客戶服務的線程。
- 使用InetSocketAddress建立一個對象,以connect。
通訊端通訊基本原則:
- 伺服器應當啟動一個專門的線程,在該線程中和客戶的通訊端建立串連。
- 由於通訊端的輸入資料流在讀取資訊時可能發生阻塞,用戶端和伺服器端都需要在一個單獨的線程中讀取資訊。
13.4 UDP資料報
通訊端是基於TCP協議的網路通訊。
UDP的資訊傳遞更快,但不提供可靠性保障,即無法知道資料能否正確到達目的地,也不能確定資料到達目的地的順序是否和發送的順序相同。
- 基於UDP通訊的基本模式:
- 將資料打包,稱為資料包(好比將信件裝入信封一樣),然後將資料包發往目的地。
- 接受別人發來的資料包(好比接收信封一樣),然後查看資料包中的內容。
用DatagramPacket的以下兩個構造方法建立待發送的資料包:
DatagramPacket(byte data[],int length,InetAddtress address,int port)DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
方法DatagramSocket()負責發送資料包。
方法receive(DatagramPacket pack)負責接收資料包。
13.5 廣播資料報
13.6 Java遠程調用
RMI是一種分布式技術,使用RMI可以讓一個虛擬機器上的應用程式請求調用位於網路上另一處虛擬機器上的對象。
代理的特點是它與遠程對象實現了相同的介面。
存根是一種特殊的位元組碼,並讓這個存根產生的對象作為遠程對象的代理,其位元組碼尾碼為"_Stub"。
遠程對象必須實現java.rmi包中的Remote介面。
代理的特點是它與遠程對象實現了相同的介面
- RMI的設計細節
- RMI使用rmic命令產生存根
- 執行rimregistry命令
- 啟動遠程物件服務
- 運行用戶端程式
返回目錄
代碼託管
碼雲連結
代碼統計
返回目錄
20165318 2017-2018-2 《Java程式設計》第九周學習總結