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

posted @ 2021-10-24 22:43  20202319吕炳翰  阅读(59)  评论(0编辑  收藏  举报