20165228 2017-2018-2 《Java程序設計》第9周學習總結
教材學習內容總結
- URL類是java.net包中的一個重要的類,URL的實例封裝着一個統一資源定位符(Uniform Resource Locator),使用URL建立對象的應用程序稱做客戶端程序
- URL對象最基本的信息:協議、地址、資源
- 建立一個URL對象
public URL(String spec) throws MalformedURLException
public URL(String protocol, String host,String file) throws MalformedURLException
InputStream openStream()
返回一個輸入流,該輸入流指向URL對象所包含的資源java
- Internet上的主機的兩種方式表示地址:域名、IP地址
- 獲取地址
- Internet上主機的地址:
1.InetAddress類的靜態方法getByName(String s);
2.得到一個InetAddress對象,該對象含有主機地址的域名和IP地址
- 獲取本地機的地址:經過InetAddress類的靜態方法getLocalHost()
- 套接字:IP地址標識Internet上的計算機,端口號標識正在計算機上運行的進程(程序)。端口號被規定爲一個16位的0~65535之間的整數,端口號與IP地址的組合得出一個網絡套接字。當兩個程序須要通訊時,它們能夠經過使用Socket類創建套接字對象並鏈接在一塊兒。
- 創建鏈接到服務器的套接字對象:
try{ Socket mysocket=new Socket(「http://192.168.0.78」,1880);
}
catch(IOException e) {
}
- mysocket相關的方法
- getInputStream()得到一個輸入流
- getOutputStream()得到一個輸出流
- 用getInputStream()獲得的輸入流接到另外一個DataInputStream數據流上
- 用getOutputStream()獲得的輸出流接到另外一個DataOutputStream數據流上
- 服務器必須創建一個ServerSocket對象,該對象經過將客戶端的套接字對象和服務器端的一個套接字對象鏈接起來,從而達到鏈接的目的
try{ ServerSocket serverForClient =new ServerSocket(2010);
}
catch(IOException e){
}
- accept()將客戶的套接字和服務器端的套接字鏈接起來:
···
try{ Socket sc= serverForClient .accept();
}
catch(IOException e){}
···
- 接收客戶的套接字鏈接:accept()方法會返回一個和客戶端Socket對象相鏈接的Socket對象
- 客戶端的套接字得到的輸入\輸出流和服務器端的套接字得到的輸出\輸入流互相鏈接.
- 使用Socket類不帶參數的構造方法Socket()建立一個套接字對象,該對象需調用
public void connect(SocketAddress endpoint) throws IOException
- 請求和參數SocketAddress指定地址的套接字創建鏈接
- 爲了使用connect方法,可使用SocketAddress的子類InetSocketAddress建立一個對象,InetSocketAddress的構造方法是:
InetSocketAddress(InetAddress addr, int port)
- 基於UDP通訊的基本模式是:
1.將數據打包,稱爲數據包(比如將信件裝入信封同樣),而後將數據包發往目的地。
2.接受別人發來的數據包(比如接收信封同樣),而後查看數據包中的內容。
- 用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) 建立一個對象,其中的參數必須和待接收的數據包的端口號相同
DatagramSocket mail_in=new DatagramSocket(端口號);
- 而後對象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);
- 遠程對象:
駐留在(遠程)服務器上的對象是客戶要請求的對象,稱做遠程對象。
- 代理的特色是它與遠程對象實現了相同的接口。
- 存根(Stub):一種特殊的字節碼,並讓這個存根產生的對象爲做爲遠程對象的代理
Remote接口:RMI爲了標識一個對象是遠程對象,便可以被客戶請求的對象,要求遠程對象必須實現java.rmi包中的Remote接口git
教材學習中的問題和解決過程
- 問題1:基於UDP的通訊和基於TCP的通訊不一樣點是什麼?
問題1解決方案:基於UDP的信息傳遞更快,但不提供可靠性保證數據庫
代碼調試中的問題和解決過程
- 問題1:敲代碼的時候出現了這樣的差錯,在沒仔細看程序的狀況下,沒能根據錯誤提示排除緣由

問題1解決方案:仔細閱讀代碼後,發現這是一句輸出語句,system中間誤輸了一個空格服務器

這周好像修改了部分以前的代碼,因此算到這周的代碼量了。實際上代碼量爲516
(statistics.sh腳本的運行結果截圖)網絡
上週考試錯題總結
- 錯題1:對於下列程序,哪一個敘述是正確的? A
A.JVM認爲這個應用程序共有兩個線程。
B.JVM認爲這個應用程序只有一個主線程。
C.JVM認爲這個應用程序只有一個thread線程。
D.程序有編譯錯誤,沒法運行。
- 錯題2:進程的基本狀態有:新建、運行、阻塞、死亡。 A
A.true
B.false
其餘(感悟、思考等,可選)
本週學習的知識讓我認識到java不限於本地的應用,除了數據庫外,還能夠經過網絡傳輸和接受數據包而且實現一些操做。socket
學習進度條
目標 |
5000行 |
25篇 |
400小時 |
|
第一週 |
235/235 |
1/1 |
15/15 |
|
第二週 |
224/459 |
2/3 |
15/30 |
|
第三週 |
443/902 |
1/4 |
15/73 |
|
第四周 |
577/1479 |
2/6 |
17/90 |
|
第五週 |
1222/2360 |
1/7 |
14/104 |
|
第六週 |
1527/3294 |
1/8 |
14/118 |
|
第七週 |
591/3883 |
1/9 |
14/132 |
|
第八週 |
1705/5158 |
1/10 |
12/144 |
|
第九周 |
516/5674 |
1/11 |
14/158 |