1. 程式人生 > 其它 >20202306 實驗四 《資料結構與面向物件程式設計》實驗報告

20202306 實驗四 《資料結構與面向物件程式設計》實驗報告

# 20202306 2021-2022-1 《Java Socket程式設計》實驗四報告

課程:《程式設計與資料結構》
班級: 2023
姓名: 李金城
學號:20202306
實驗教師:王志強
實驗日期:2021年10月23日
必修/選修: 必修

## 1.實驗內容

(一)Java Socket程式設計

1.學習藍墨雲上教材《Java和Android程式設計》“第16章 輸入/輸出 ”和“第22章 網路”,學習JavaSocket程式設計
2.結對程式設計。結對夥伴A編寫客戶端SocketClient.java,結對夥伴B編寫伺服器端。
3.截圖加學號水印上傳藍墨雲,程式碼push到碼雲,並撰寫實驗報告。

(二)Java和密碼學

參考 http://www.cnblogs.com/rocedu/p/6683948.html

以結對的方式完成Java密碼學相關內容的學習(帖子中所有程式碼和相關知識點需要學習)。提交學習成果碼雲連結和代表性成果截圖,要有學號水印。

(三)編寫有理數/複數計算器

結對程式設計,結對夥伴A編寫有理數計算器。結對夥伴B編寫複數計算器。截圖加水印上傳藍墨雲,程式碼push碼雲。

(四)遠端有理數計算器

結對程式設計,結對夥伴A程式設計實現客戶端,結果夥伴B實現伺服器端。
客戶端通過鍵盤輸入一個有理數計算的公式(例如:1/4 + 1/6 = ),並把該公式以字串的形式傳送給夥伴B(伺服器端),伺服器端根據字串計算出結果為5/12,並把結果返回給客戶端A,A收到結果後輸出結果。截圖加水印上傳藍墨雲,程式碼push碼雲。

(五)遠端複數計算器

結對程式設計,結對夥伴B程式設計實現客戶端,結果夥伴A實現伺服器端。
客戶端通過鍵盤輸入一個有理數計算的公式(例如:1/4 + 1/6 = ),並把該公式以字串的形式傳送給夥伴A(伺服器端),伺服器端根據字串計算出結果為5/12,並把結果返回給客戶端B,B收到結果後輸出結果。截圖加水印上傳藍墨雲,程式碼push碼雲。
注意實驗四(4)和實驗四(5),一個人不能僅實現客戶端,必須實現一個客戶端和伺服器,否則兩個實驗均不得分!!!

(六)實驗報告

在規定時間前發表部落格,標題“學號 實驗四 《資料結構與面向物件程式設計》實驗報告”

## 2. 實驗過程及結果 (一)Java Socket程式設計
  碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Server.java

(二)Java和密碼學

  1、凱撒密碼:

    碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Caesar.java

    (1)加密:

    (2)解密:

  2、DES:     碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Skey_DES.java          https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Skey_kb.java          https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/SEnc.java          https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/SDec.java     (1)生成金鑰:

    (2) 加密:

    (3)解密:

  3、RSA:     碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Dec_RSA.java      https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Enc_RSA.java     (1)生成私鑰與公鑰

    (2)利用公鑰加密

    (3)利用私鑰解密

  4、使用金鑰協定建立共享金鑰(DH)

    碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Key_DH_A.java

         https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Key_DH_B.java

         https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/KeyAgree.java

    (1)建立DH公鑰與私鑰

    (2)DH共享金鑰

  

  5、MD5

   碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/MD5.java

(三)編寫有理數/複數計算器

  碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/ComplexCalculatorTest.java

(四)遠端有理數計算器

  碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/RationalNumCalClient.java

  

(五)遠端複數計算器

  碼雲連結:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/ComplexCalculatorServer.java

## 3. 實驗過程中遇到的問題和解決過程
- 問題1:編寫時為找到如何輸入引數
- 問題1解決方案:在仔細研究後發現,在其調整配置的時候,出現了輸入的一項。
- 問題2:程式碼完成後無法進行匹配
- 問題2解決方案:連線同一個WiFi並輸入對方IP地址即可訪問


## 其他(感悟、思考等)

  少參考網上資料和輔導書,要學會自己鑽研,形成自己的自學體系。在充分利用好資源的同時,全方面吸收並反覆利用,才能使得操作過程變得熟練,真正使程式碼變成自己的東西。
 
## 參考資料

- [《Java程式設計與資料結構教程(第二版)》](https://book.douban.com/subject/26851579/)

- [《Java程式設計與資料結構教程(第二版)》學習指導](http://www.cnblogs.com/rocedu/p/5182332.html)

- http://www.cnblogs.com/rocedu/p/6683948.html