20175314 实验五 Java网络编程
一、实验报告封面
课程:Java程序设计 班级:1753班 姓名:薛勐 学号:20175314
指导教师:娄嘉鹏 实验日期:2018年5月31日
实验时间:15:35 - 17:15 实验序号:五
实验名称: 网络编程与安全
实验目的:
1、掌握Java Socket的相关内容;
2、学会建立客户端与服务器端之间的联系;
3、学习并应用密码学的相关内容
二、实验内容
任务(一)
1、结对实现中缀表达式转后缀表达式的功能 MyBC.java
2、结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
任务(二)
1、基于Java Socket实现客户端/服务器功能,传输方式用TCP
2、客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
3、服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
4、客户端显示服务器发送过来的结果
任务(三)
1、基于Java Socket实现客户端/服务器功能,传输方式用TCP
2、客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
3、服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
4、客户端显示服务器发送过来的结果
任务(四)
1、基于Java Socket实现客户端/服务器功能,传输方式用TCP
2、客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
3、客户端和服务器用DH算法进行3DES或AES算法的密钥交换
4、服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
5、客户端显示服务器发送过来的结果
任务(五)
1、基于Java Socket实现客户端/服务器功能,传输方式用TCP
2、客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
3、客户端和服务器用DH算法进行3DES或AES算法的密钥交换
4、服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
5、客户端显示服务器发送过来的结果
最后将每个任务的代码上传到码云。
三、实验步骤
任务(一)
我和组员在虽然在结队编程任务中不在一组
但是都已经实现了中缀转后缀的功能,以及将后缀表达式利用栈进行运算的功能
因此任务(一)我们直接在之前代码的基础上进行修改即可
代码运行结果如下:可以包含分数形式的多种符号四则运算
任务(二)
通过java.net包中的Socket类和ServerSocket类来实现这个功能
- 客户端
- 服务器端
任务(三)
参考Java 密码学算法,复习使用DES算法
- 客户端
- 服务器端
任务(四)
参考DH算法原理,学习使用DH算法
- 客户端
- 服务器端
任务(五)
参考Java 密码学算法
在任务(四)的基础上引入MD5算法加密的类,调用其他的函数,参数为要加密的字符串,返回加密后的字符串
- 客户端
- 服务器端
四、码云链接
五、遇到的问题
- 从第二个任务开始,调试代码经常会遇到
Exception in thread "main" java.lang.NullPointerException
,但电脑重启后又恢复正常 - 通过查阅资料,我认为出现这样的warning主要有两个原因
①数组空间在使用前没有进行初始化
②之前的服务器端口关闭,开了多个服务器端口,却使用了同样的端口
综上我应该是第二种情况,电脑重启或IDEA重启后端口被重置故正常
六、感想与收获
本次实验内容较多,完成过程比较漫长,是之前在C语言从未接触过的端口,综合性高,对我来说依然难度很大,即使是最后一个实验,在接下来的编程中一定会继续努力提高自己
七、Personal Software Process时间
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 60 | 15% |
设计 | 80 | 20% |
代码实现 | 180 | 45% |
测试 | 40 | 10% |
分析总结 | 40 | 10% |
八、参考资料
- Java 密码学算法
- DH算法原理