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

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

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

課程:《程式設計與資料結構》
班級: 2023
姓名: 呂炳翰
學號:20202319
實驗教師:王志強
實驗日期: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/besti2023javads/lv-binghan/blob/master/Java%20Socket%E7%BC%96%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8

https://e.gitee.com/besti-cs/repos/besti2023javads/lv-binghan/blob/master/Java%20Socket%E7%BC%96%E7%A8%8B%E5%AE%A2%E6%88%B7%E7%AB%AF

(2)java和密碼學

碼雲地址:

https://gitee.com/besti2023javads/lv-binghan

1、凱撒密碼:

執行截圖:

在這個地方輸入我們要加密的內容,是往後移動四位的意思。

2、Java對稱加密-DES演算法
執行截圖:
執行DES程式,得到金鑰key1.dat

儲存金鑰編碼格式,在程式中輸入java Skey_kb,在程式的當前目錄中將產生檔名為keykb1.dat的檔案,執行結果如下:

處理加密結果:

最終進行解密:

3、Java非對稱加密-RSA演算法:
在凱撒密碼裡提到的老地方輸入java Skey_RSA,執行RSA從而生成公鑰和私鑰。

繼續輸入java Skey_RSA,執行Enc RsA程式,得到如下結果:

這都顯示了公鑰中的引數以及加密的結果c

接著執行程式輸入java Dec_RSA執行DecRsa程式,得到如下結果:
其中顯示了私鑰中的引數以及解密的結果,其中整型的明文轉換後顯示出字串“Hello World!”。

4、使用金鑰協定建立共享金鑰
建立A、B兩個資料夾,然後分別在裡面輸入“java Key_DH Apub.dat Apri.dat”和“java Key_DH Bpub.dat Bpri.dat”執行,執行結果如圖所示:

將程式KeyAgree編譯後分別拷貝在A和B兩個目錄,首先在A目錄輸入“java KeyAgree Bpub.dat Apri.dat”執行程式,它使用檔案Bpub.dat中對方的公鑰和檔案Apri.dat中自己的私鑰建立了一段共享的位元組陣列。

(三)編寫有理數/複數計算器 碼雲地址:https://gitee.com/besti2023javads/lv-binghan/blob/master/%E6%9C%89%E7%90%86%E6%95%B0%E8%AE%A1%E7%AE%97%E5%99%A8

(四)遠端有理數計算器

碼雲地址:https://gitee.com/besti2023javads/lv-binghan/blob/master/%E8%BF%9C%E7%A8%8B%E6%9C%89%E7%90%86%E6%95%B0%E8%AE%A1%E7%AE%97%E5%99%A8

我擔任的是有理數計算機的客戶端

(五)遠端複數計算器

碼雲地址:https://gitee.com/besti2023javads/lv-binghan/blob/master/%E8%BF%9C%E7%A8%8B%E5%A4%8D%E6%95%B0%E8%AE%A1%E7%AE%97%E5%99%A8%E6%9C%8D%E5%8A%A1%E7%AB%AF

我擔任伺服器

3. 實驗過程中遇到的問題和解決過程

  • 問題1:出現connect reset問題。

  • 問題1解決方法:一開始連線不上的時候我查閱了百度,可是發現始終沒有有效的解決方法,於是我決定把編寫的類給去掉,檢查連線是否有問題。但是還是沒有成功,最後我編寫了一個主程式aswd來執行試試看類,在執行過程中可以發現類裡面的問題,並及時糾正,這樣有助於快速找出程式問題的原因。
  • 問題2:在執行密碼學時,遇到了陣列引用超出界限的問題
  • 問題二解決方法:為陣列分配空間,讓陣列得以執行。

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

  做題目的時候要少一些參考別的資料,做到自己完成作業,然後自己能夠吸收其中的知識,才能更好的掌握這一門內容。另外,當遇到問題時,不要第一時間就覺得要去找老師或者是不做了,要試著自己去琢磨、鑽研,最好是能夠自己把問題解決了,最後實在解決不出來的時候再去詢問老師解決方法。

本次實驗看起來對我們難度非常的大,其實內在是很簡單明瞭的,有理數類的加減乘除和複數類的加減乘除的程式碼其實之前都做過了,而我們只需要理解清楚javasocket程式設計程式碼上的含義還有明白如何運用類將字串轉換成數字就好了。

造成這次實驗完成的不好在於對於書本的不重視,所以要加強對於課本的研究和了解。


 
## 參考資料

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

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

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