20175218 2018-2019-2 《Java程序設計》第十一週學習總結
教材學習內容總結
- 第十三章主要講的是Java網絡編程,包括URL類,InetAddress類,套接字,UDP數據報,廣播數據報以及Java遠程調用(RMI)
URL的構造方法html
- URL類一般使用以下的構造方法建立一個URL對象:
- public URL(String spec) throws MalformedURLException
- public URL(String protocol, String host,String file) throws MalformedURLException
讀取URL中的資源java
- URL對象調用InputStream openStream()方法能夠返回一個輸入流,該輸入流指向URL對象所包含的資源。經過該輸入流能夠將服務器上的資源讀入到客戶端。
獲取地址編程
- 獲取Internet上主機的地址
- 可使用InetAddress類的靜態方法getByName(String s);
- 得到一個InetAddress對象,該對象含有主機地址的域名和IP地址,該對象用以下格式表示它包含的信息:
- www.sina.com.cn/202.108.37.40
- 獲取本地機的地址
- 咱們可使用InetAddress類的靜態方法getLocalHost()得到一個InetAddress對象,該對象含有本地機的域名和IP地址。
客戶端套接字服務器
- 客戶端的程序使用Socket類創建負責鏈接到服務器的套接字對象。
- 創建鏈接到服務器的套接字對象:
- 與mysocket相關的方法
- getInputStream()得到一個輸入流
- getOutputStream()得到一個輸出流
- 用getInputStream()獲得的輸入流接到另外一個DataInputStream數據流上
- 用getOutputStream()獲得的輸出流接到另外一個DataOutputStream數據流上
ServerSocket對象與服務器端套接字網絡
- 服務器必須創建一個ServerSocket對象,該對象經過將客戶端的套接字對象和服務器端的一個套接字對象鏈接起來,從而達到鏈接的目的。
- 創建ServerSocket對象:
- try{ ServerSocket serverForClient =new ServerSocket(2010);
- }
- catch(IOException e){}
- 使用方法accept()將客戶的套接字和服務器端的套接字鏈接起來,代碼以下所示:
- try{ Socket sc= serverForClient .accept();
- }
- catch(IOException e){}
- 所謂「接收」客戶的套接字鏈接就是accept()方法會返回一個和客戶端Socket對象相鏈接的Socket對象。
- 客戶端的套接字得到的輸入\輸出流和服務器端的套接字得到的輸出\輸入流互相鏈接。
UDP數據報socket
- 基於UDP的通訊和基於TCP的通訊不一樣,基於UDP的信息傳遞更快,但不提供可靠性保證。
- 基於UDP通訊的基本模式是:
- 將數據打包,稱爲數據包(比如將信件裝入信封同樣),而後將數據包發往目的地。
- 接受別人發來的數據包(比如接收信封同樣),而後查看數據包中的內容。
發送數據包分佈式
- 用DatagramPacket類將數據打包,即用DatagramPacket類建立一個對象,稱爲數據包。用DatagramPacket的如下兩個構造方法建立待發送的數據包:
- DatagramPacket(byte data[],int length,InetAddtress address,int port)
- DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
- 用DatagramSocket類的不帶參數的構造方法:DatagramSocket()建立一個對象,該對象負責發送數據包。例如:
- DatagramSocket mail_out=new DatagramSocket();
- mail_out.send(data_pack);
接收數據包學習
- 首先用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。
廣播數據報測試
- 廣播數據報涉及到地址和端口。
- 廣播數據報是一種較新的技術,要廣播或接收廣播的主機都必須加入到同一個D類地址。
Java 遠程調用(RMI).net
- Java遠程調用,RMI(Remote Method Invocation)是一種分佈式技術,使用RMI可讓一個虛擬機(JVM)上的應用程序請求調用位於網絡上另外一處的JVM上的對象方法。習慣上稱發出調用請求的虛擬機(JVM)爲(本地)客戶機,稱接受並執行請求的虛擬機(JVM)爲(遠程)服務器。
教材學習中的問題和解決過程
- 問題1:Java怎麼實現遠程調用?
- 問題1解決方案:
- Java遠程方法調用是編程過程當中比較常見的問題,列舉一下主要包括以下幾類:
- 一、Java RMI (Remote Method Invocation)
- 二、EJB遠程接口調用
- 三、WebService,如jax-ws axis xfire cfx
- 四、Hessian以及Spring HttpInvoker
- 五、直接動態請求返回JSON數據
- 關於這幾類的區別比較請參考這位大佬的博客:
- 博客連接:輸入連接說明
代碼調試中的問題和解決過程
- 問題1:java的代碼中URL的使用方法
- 問題1解決方案:
- 一、URL
- a、URL 統一資源定位符,表示Internet上某一資源的地址。
- b、URL 由兩部分組成:協議名稱和資源名稱,中間用冒號隔開。
- c、在java.net包中,提供了URL類來表示URL。
- 二、使用URL讀取網頁內容
- a、經過URL對象的openStream()方法能夠獲得指定資源的輸入流
- b、經過輸入流能夠讀取、訪問網絡上的資源

上週考試錯題總結
結對及互評
評分標準
- 正確使用Markdown語法(加1分):
- 不使用Markdown不加分
- 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
- 排版混亂的不加分
- 模板中的要素齊全(加1分)
- 缺乏「教材學習中的問題和解決過程」的不加分
- 缺乏「代碼調試中的問題和解決過程」的不加分
- 代碼託管不能打開的不加分
- 缺乏「結對及互評」的不能打開的不加分
- 缺乏「上週考試錯題總結」的不能加分
- 缺乏「進度條」的不能加分
- 缺乏「參考資料」的不能加分
教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分
- 本週有效代碼超過300分行的(加2分)
- 其餘加分:
- 週五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進狀況的加1分
- 有動手寫新代碼的加1分
- 課後選擇題有驗證的加1分
- 代碼Commit Message規範的加1分
- 錯題學習深刻的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
- 結對學習狀況真實可信的加1分
- 扣分:
- 有抄襲的扣至0分
- 代碼做弊的扣至0分
- 遲交做業的扣至0分
其餘(感悟、思考等,可選)
對第八週的測試題進行了總結分析:
博客連接
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
200/200 |
1/1 |
24/24 |
|
第二週 |
400/600 |
1/2 |
15/39 |
|
第三週 |
600/1200 |
1/3 |
18/57 |
|
第四周 |
700/1900 |
1/4 |
18/75 |
|
第五週 |
800/2700 |
5/9 |
18/93 |
|
第六週 |
800/3500 |
3/12 |
28/121 |
|
第七週 |
800/4300 |
3/15 |
18/139 |
|
第八週 |
900/5200 |
5/20 |
26/165 |
|
第九周 |
900/6100 |
4/24 |
24/189 |
|
第十週 |
1000/7100 |
4/28 |
29/218 |
|
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計爲何這麼難,軟件工程 估計方法
計劃學習時間:18小時
實際學習時間:18小時
改進狀況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料