# 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/besti-cs/ljc20202306_Java/blob/bin/src/Server.java
(2)java和密码学
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中自己的私钥创建了一段共享的字节数组。
(三)编写有理数/复数计算器
(四)远程有理数计算器
我担任的是有理数计算机的客户端
(五)远程复数计算器
我担任服务器
问题1:出现connect reset问题。
## 其他(感悟、思考等)
做题目的时候要少一些参考别的资料,做到自己完成作业,然后自己能够吸收其中的知识,才能更好的掌握这一门内容。另外,当遇到问题时,不要第一时间就觉得要去找老师或者是不做了,要试着自己去琢磨、钻研,最好是能够自己把问题解决了,最后实在解决不出来的时候再去询问老师解决方法。
本次实验看起来对我们难度非常的大,其实内在是很简单明了的,有理数类的加减乘除和复数类的加减乘除的代码其实之前都做过了,而我们只需要理解清楚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