北京电子科技学院(BESTI)

              

课程:Java程序与设计         班级:1352

姓名:王玥

学号:20135232

成绩:             指导教师:娄嘉鹏       实验日期:2015.6.9

实验密级:         预习程度:             实验时间:15:30-18:00

仪器组次:          必修/选修:选修        实验序号:5

实验名称:Java网络编程及安全

实验目的与要求:结对编程,实现客户端和服务器之间数据的发送与接收,实现加解密和验证Hash函数值。

实验仪器:

名称

型号

数量

PC

TOSHIBA

1

Eclipse

LUNA

1

【实验内容】

1.用书上的TCP代码,实现服务器与客户端。

2.客户端与服务器连接

3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务器的公钥加密,计算明文的Hash函数值,一起传送给客户端

4.客户端用RSA公钥密码中服务器的私钥解密DES的,秘钥,用秘钥对密文进行解密,得出明文。计算求得明文的Hash函数值,检查是否与传送过来的一致,如果一直,则表示匹配成功。

【实验步骤】

  我负责服务器的部分。

  我的结对伙伴黎静的博客园主页: http://www.cnblogs.com/heiguirenxi/

  首先建立一个Socket对象,用来连接特定服务器的指定端口,输入的参数是ip地址和端口,注意ip地址是服务器的ip地址,即运行服务器的那台主机的ip地址。

  怎么查看主机的ip地址呢?在命令行中输入ipconfig即可。如下图所示:

  然后用BufferedReader对象获得从服务器传来的网络输入流,用PrintWriter对象获得从客户端向服务器输出数据的网络输出流,用BufferedReader对象创建键盘输入流,以便客户端从键盘上输入信息。以上根据TCP的客户端代码编写。

  下一步是先用RSA算法加密DES的秘钥,加密采用服务器的公钥。将加密后的秘钥传送给服务器。

  然后用DES算法加密明文,将密文传到服务器。

  然后计算明文的Hash函数值,传送给服务器。

  以上用到的加密算法、秘钥、Hash函数计算过程均利用的老师提供的代码。

  最后从网络输入流读取结果,把从服务端返回的结果输出出来。

  在抛出异常部分,因为继承的是Exception类,所以直接输出抛出的异常。

  代码写好后,先运行服务器,再运行客户端,显示“服务器已经启动后”启动客户端,,连接成功会显示“已经建立连接”,然后就可以从客户端输入数据发送到服务器了。

服务器代码:

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;

import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class ServerTest {
int port = 8821;

void start() {
Socket s = null;
try {
ServerSocket ss = new ServerSocket(port); //创建一个ServerSocket套接字对象,并绑定在8821端口上
while (true) {
// 选择进行传输的文件
String filePath = "C:\\Users\\田雨晴\\Desktop\\服务器\\jiami.txt";
File fi = new File(filePath); //通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例
System.out.println("文件长度:" + (int) fi.length());

s = ss.accept();
System.out.println("建立socket链接");
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream())); //DataInputStream:使用指定的底层 InputStream 创建一个 DataInputStream;
dis.readByte(); //返回此输入流的下一个字节,以有符号 8 位 byte 的形式表示。

DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(s.getOutputStream());//创建一个新的数据输出流,将数据写入指定基础输出流

ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong((long) fi.length());
ps.flush();

int bufferSize = 8192; //缓冲区,1k
byte[] buf = new byte[bufferSize];

while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}

if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();// 直到socket超时,导致数据不完整。
fis.close();
s.close();
System.out.println("文件传输完成");
}

} catch (Exception e) {
e.printStackTrace();
}

【实验体会】

这次实验主要是练习在已有的代码之上如何把功能在同一个程序中实现,老师在实验之前已经给了TCP的代码和密码算法的加解密方法,这给我们的编程带来了极大的方便,所以我们要做的就是熟悉这些代码所代表的含义,内化成自己的东西并能够掌握运用。

【实验过程中遇到的问题以及解决方案】

  这次实验中我主要遇到了两个问题,其一是如何将代码整合到一起,其二是如何实现服务器与客户端的连接。我们通过命令行得到了正确的ip地址,终于成功的实现了连接。

实验五 Java网络编程及安全 实验报告 20135232王玥的更多相关文章

  1. 20155227 《Java程序设计》实验五 Java网络编程及安全实验报告

    20155227 <Java程序设计>实验五 Java网络编程及安全实验报告 实验内容 任务一: 编写MyBC.java实现中缀表达式转后缀表达式的功能. 编写MyDC.java实现从上面 ...

  2. 20155305 2016-2017-2 《Java程序设计》 实验五 Java网络编程及安全实验报告

    20155305 2016-2017-2 <Java程序设计> 实验五 Java网络编程及安全实验报告 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传 ...

  3. 20145219 《Java程序设计》实验五 Java网络编程及安全实验报告

    20145219 <Java程序设计>实验五 Java网络编程及安全实验报告 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和2 ...

  4. 20145326 《Java程序设计》实验五——Java网络编程及安全实验报告

    实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和20145211黄志远http://www.cnblogs.com/nostalgia-/组 ...

  5. 20145213《Java程序设计》实验五Java网络编程及安全

    20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...

  6. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  7. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  8. JAVA课程实验报告 实验五 Java网络编程及安全

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  9. 20145225《Java程序设计》 实验五 Java网络编程及安全

    20145225<Java程序设计> 实验五 Java网络编程及安全 实验报告 一.实验内容 基于Java Socket实现安全传输. 基于TCP实现客户端和服务器,结对编程一人负责客户端 ...

随机推荐

  1. openstack self-service 实例 连接外网数据表流程

    我的openstack的架构是最简单的controller-compute架构,在provider基础上创建self-service  self-service的实例上外网的流量走向 登陆实例,pin ...

  2. caffe 安装记录

    为了使用caffe,特地装了linux系统,版本:Ubuntu14.04 X64 可参照 http://www.cnblogs.com/platero/p/3993877.html 这个博客写的更好h ...

  3. 根据location地址,在导航栏高亮显示当前页面

    获取当前页面的地址栏.与导航栏中所有<a> 标签的href属性 进行比较.如果相等则高亮显示 此<a>标签. 注意点:a 标签的href 属性在浏览器解析时 是绝对路径. a  ...

  4. 使用CURL模拟表单上传文件

    //以下代码适合PHP7.x PHP5.6$file = new CURLFile('./127.zip','application/octet-stream');$file->setMimeT ...

  5. 大数据入门第三天——基础补充与ActiveMQ

    一.多线程基础回顾 先导知识在基础随笔篇:http://www.cnblogs.com/jiangbei/p/6664555.html 以下此部分以补充为主 1.概念 进程:进行中的程序,内存中有独立 ...

  6. PostgreSQL参数学习:deadlock_timeout

    磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页    回到顶级页面:PostgreSQL索引页[作者 高健@博客园  luckyjackgao@g ...

  7. 【HNOI2014】道路堵塞

    题面 题解 解法一 这个思路要基于以下一个结论: 当你删掉某条边\((x,x+1)\)时,最短路路线为:\(1\to x(\leq u)\to y(>u) \to n\),并且\(x\to y\ ...

  8. linux 修改文件最大数

    ulimit -a 查看所有 open files (-n) 1024 是linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量) ulimit -SHn 10000 ##临时修 ...

  9. Mweb发布博客

    1.设置 + 选择红色 2     输入该输入的帐号和密码  博客网址就是你的博客文章页的地址,然后输入帐号和密码 3 API 地址在 设置-->博客设置,红色标记就是API地址 4 发布, ...

  10. MyEclipse断点调试不可用解决办法

    前言:MyEclipse中出现Debug调试不可用,断点处出现斜线.那么,如何解决此类问题? 1.打开myeclipse软件(版本不限) 2.设置断点,出现如下图所示情况,断点处出现斜线. 3.修改方 ...