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%
八、参考资料