資源描述:
《java程序設計 張永強 張墨華 第14章習題答案》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、第14章網(wǎng)絡編程1.請分析對比TCP協(xié)議與UDP協(xié)議的特點,以及它們通訊流程的區(qū)別。參考14.1.22.解釋在基于TCP的網(wǎng)絡編程時ServerSocket和Socket的作用。ServerSocket實現(xiàn)了服務器套結字,它的實例需要注冊到主機系統(tǒng),并提供面向客戶端的請求偵聽服務。而Socket實現(xiàn)客戶端套接字,基于TCP網(wǎng)絡編程時的網(wǎng)絡客戶端可以利用一個Socket實例和服務器端的Socket實例進行通信。3.解釋在基于UDP的網(wǎng)絡編程時DatagramSocket和DatagramPacket的作用。DatagramSocket表示用來發(fā)送和接收數(shù)據(jù)報包的套接字,數(shù)據(jù)報套接字是包
2、投遞服務的發(fā)送或接收點。DatagramPacket數(shù)據(jù)報包用來實現(xiàn)無連接包投遞服務。4.如果要捕捉端口重復使用的異常,應該使用哪個異常類?BindException用來將套接字綁定到本地地址和端口時發(fā)生錯誤的情況下,拋出此異常。5.對于對象的傳輸,在編程的時候要注意哪些問題?傳輸基礎對象和非基礎對象時,程序編寫有什么不同?一個對象能否傳輸取決于該對象是否能夠被串行化。對于JDK提供的如Integer、String、Date等類型的對象,由于已經(jīng)被串行化,因此可以被直接傳輸,而使用用戶自定義的類,如果需要進行串行化傳輸,則該類要實現(xiàn)Serializable接口,并且保證該類的每個要傳
3、輸?shù)膶傩云漕愋捅仨氁彩强纱谢M瑫r,由于Socket的通信是建立在雙方的同步基礎之上的,因此在進行非基礎對象的傳輸時,需要保證通信兩端構造流的順序必須按照相反的順序構造。6.程序14-6給出了客戶端的對象傳輸程序,請給出服務器端的改造程序,并調(diào)試運行。packagechap14.session4;publicclassAccount{privateStringid;//用戶唯一的idprivateStringname;//用戶名稱privateintbalance;//當前余額publicAccount(Stringid,Stringname,intbalance){super()
4、;this.id=id;this.name=name;this.balance=balance;}publicAccount(Stringid,Stringname){super();this.id=id;this.name=name;this.balance=0;}//這里省略了每個屬性的getter和setter方法,請創(chuàng)建時自行添加。@OverridepublicStringtoString(){return"Account[name:"+name+",balance:"+balance+"]";}/***@returntheid*/publicStringgetId(){re
5、turnid;}/***@paramid*theidtoset*/publicvoidsetId(Stringid){this.id=id;}/***@returnthename*/publicStringgetName(){returnname;}/***@paramname*thenametoset*/publicvoidsetName(Stringname){this.name=name;}/***@returnthebalance*/publicintgetBalance(){returnbalance;}/***@parambalance*thebalancetoset*/
6、publicvoidsetBalance(intbalance){this.balance=balance;}}packagechap14.session4;importjava.util.HashMap;importjava.util.Map;publicfinalclassAccountPool{privatestaticMapaccounts=newHashMap();static{accounts.put("001",newAccount("001","王峰",1000));accounts.put("002",
7、newAccount("002","張靜",1500));accounts.put("003",newAccount("003","魯寧",800));accounts.put("004",newAccount("004","翟宇",660));accounts.put("005",newAccount("005","劉新",1700));}privateAccountPool(){}publicstaticAccountgetAccount(String