课程:Java程序设计                         班级:1351            姓名:王玮怡      学号:20135116

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

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

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

实验名称:    TCP传输及加解密

实验内容:

1.运行教材上TCP代码,结对进行,一人服务器,一人客户端;

2.利用加解密代码包,编译运行代码,一人加密,一人解密;

3.集成代码,一人加密后通过TCP发送;

注:加密使用AES或者DES/AES或者DES加密密钥key并发送,使用服务器的公钥加密/公钥算法使用RSA或DH/检验发送信息的完整性使用MD5或者SHA3;

4.用Git进行版本控制。

5.完成Blog

实验仪器:

名称

型号

数量

     PC

Macbook Air(win7系统)

1

结对伙伴:20135109高艺桐,

博客地址:http://www.cnblogs.com/gyt0520/p/4570277.html

我负责服务器,她负责客户端

 

代码

 

服务器:

import java.net.*;

import java.io.*;

import java.security.*;

import javax.crypto.*;

import javax.crypto.spec.*;

public class MyServer {

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

ServerSocket sc = null;

ServerSocket sc1 = null;

Socket socket=null;

Socket socket1=null;

try {

sc= new ServerSocket(4431);//创建服务器套接字

sc1= new ServerSocket(4430);//创建服务器套接字

System.out.println("端口号:" + sc.getLocalPort());

System.out.println("服务器1已经启动...");

System.out.println("端口号:" + sc1.getLocalPort());

System.out.println("服务器2已经启动...");

socket = sc.accept();   //等待客户端连接

System.out.println("已经建立连接");

socket1 = sc1.accept();   //等待客户端连接

System.out.println("已经建立1连接");

//获得网络输入流对象的引用

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

BufferedReader in1 = new BufferedReader(new InputStreamReader(socket1.getInputStream()));

////获得网络输出流对象的引用

System.out.print("已接收\n");

PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

String   aline=in.readLine();//读取客户端传送来的数据

String   aline1=in1.readLine();

System.out.print("写入文件中...\n");

byte [] bytes = aline.getBytes("GB2312");

byte [] bytes1 = aline1.getBytes("GB2312");

aline = new String(bytes, "GB2312");

aline1 = new String(bytes1, "GB2312");

FileOutputStream  s=new FileOutputStream("key1.dat");

s.write(bytes);

FileOutputStream s1=new FileOutputStream("SEnc.dat");

s1.write(bytes1);

System.out.print("已写入文件\n");

//生成解密密钥

FileInputStream f=new FileInputStream("key1.dat");

ObjectInputStream b=new ObjectInputStream(f);

Key k=(Key)b.readObject( );

byte[ ] kb=k.getEncoded( );

FileOutputStream  f2=new FileOutputStream("keykb1.dat");

f2.write(kb);

System.out.print("生成解密密钥\n");

// 打印密钥编码中的内容

for(int i=0;i<kb.length;i++){

//     System.out.print(kb[i]+",");

}

//解密

FileInputStream a=new FileInputStream("SEnc.dat");

int num=a.available();

byte[ ] ctext=new byte[num];

a.read(ctext);

FileInputStream  f1=new FileInputStream("keykb1.dat");

int num2=f1.available();

byte[ ] keykb=new byte[num2];

f1.read(keykb);

SecretKeySpec e=new  SecretKeySpec(keykb,"DESede");

Cipher cp=Cipher.getInstance("DESede");

cp.init(Cipher.DECRYPT_MODE, k);

byte []ptext=cp.doFinal(ctext);

String p=new String(ptext,"GB2312");

System.out.print("解密中...\n");

System.out.println(p);

//返回

System.out.println("从客户端接收到信息为:"+p); //通过网络输出流返回结果给客户端

out.println(p);

out.close();

in.close();

sc.close();

} catch (Exception e) {

System.out.println(e);

}

}

}

截图:

二、遇到的问题及怎样解决:

将程序包中程序整合时经常容易出现重定义和变量名占用的问题,此时只需要注销掉重复定义的部分或者更改变量名即可,但要注意后来引用部分也需要更改变量名

三、实验感想:

  通过这次实验,我和同伴最大的收获是经过不断努力,将零碎的代码段拼凑起来并运行出来。过程是复杂的,但是在同学的帮助和我们自己的不断尝试下,还是有一定进展。说实话,对于我这样对编程不太精通的幼儿园级学者来说,网络连接、传送、反馈上有很多很难的地方,遇到有问题的地方常常感觉无从下手,通常即使在上网翻阅很多资料也无济于事,一定要寻求大神们的帮助才能解决,因此,我们每次的实验结果无论怎样,都是很多人一起的智慧。

PSP时间

步骤

耗时

百分比

需求分析

1h

 16.7%

设计

 1h  16.7%

代码实现

 2h  33.2%

测试

 1h  16.7%

分析总结

 1h  16.7%

Java实验报告(实验五)的更多相关文章

  1. 第七周课程总结 & 实验报告(五)

    第七周课程总结 一.抽象类与接口的应用 1.实例化 2.实际应用 ---模板设计(抽象类) ---制定标准(接口) 3.设计模式 ---工厂设计 ---代理设计 ---适配器设计 二.抽象类与接口之间 ...

  2. JAVA课程实验报告 实验二 Java面向对象程序设计

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

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

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

  4. JAVA课程实验报告 实验三 敏捷开发与XP实践

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

  5. Java课程实验报告 实验一 Java开发环境的熟悉

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

  6. Java课程实验报告 实验四 Java网络编程及安全

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计     班级:1352     姓名:吕松鸿  学号:20135229 成绩:               ...

  7. 第七周课程总结&实验报告(五)

    实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...

  8. 实验报告(五)&第七周学习总结

    实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. 掌握创建自定义包 ...

  9. C语言实验报告(五) 用自定义函数求2~n之间的素数

    #include<stdio.h>#include <math.h>int main(){  int i,n;  printf("input n:");  ...

  10. C语言实验报告(五) 两个正整数的最大公约数

    编程实现求两个正整数的最大公约数,要求计算最大公约数用函数fun(int a,int b)实现. #include<stdio.h>void main(){  int n,a,b;  in ...

随机推荐

  1. Servlet 核心接口

    在Servlet体系结构中,除了用于实现Servlet的Servlet接口.GenericServlet类和HttpServlet类外,还有一些辅助Servlet获取相关资源信息的重要接口,了解这些接 ...

  2. Spring-IOC RootBeanDefinition源码分析

    GenericBeanDefinition是一站式的标准bean definition,除了具有指定类.可选的构造参数值和属性参数这些其它bean definition一样的特性外,它还具有通过par ...

  3. OpenCV——staturate_cast、掩模操作

    saturate_cast<>()模板函数,用于溢出保护 //大致的原理如下 ) data=; elseif(data>) data=; 掩模操作:https://blog.csdn ...

  4. Python2.7-bisect

    bisect 模块,对已经排好序的序列进行筛选,添加新元素,效率高,不用在插入新元素后重新排序,可以快速找到小于指定值的位置 个人想法:与 heapq 的堆可以较好的结合使用 模块方法:bisect_ ...

  5. 原生js switch语句

    一.我们在流判断的时候,我们大多数的情况我使用if  else 语句.但是对于一些大量的逻辑的判断的时候,我们不建议使用if elseif语句 这种语句的效率执行不高,因为他每个expression ...

  6. Android GridView使用View.GONE只隐藏内容而不隐藏空间的解决方案

    最近在处理GridView的时候遇到这样一个问题:Android手机客户端接收服务端返回的一串数据(数据条数不固定),这串数据不一定都要显示到GridView上,也就是说有一部分内容需要隐藏掉,即有一 ...

  7. 贪心算法——字典序最小问题,Saruman‘s Army

    题目描述 Best Cow Line (POJ 3617) 给定长度为N的字符串S,要构造一个长度为N字符串T.T是一个空串,反复执行下列任意操作: 从S的头部删除一个字符,加到T的尾部: 从S的尾部 ...

  8. POJ 1144 Network(tarjan 求割点个数)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17016   Accepted: 7635 Descript ...

  9. WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据

    XML序列化保存数据 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  10. Tomcat 动态数据库连接池

    package com.boguan.bte.util; import java.sql.Connection;import java.sql.SQLException;import java.uti ...