当前位置: 首页 > 编程日记 > 正文

20135234mqy 实验四

北京电子科技学院(BESTI)

             

课程:java程序设计 班级:1352  姓名:mqy  学号:20135234

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

实验密级:       预习程度:           实验时间:15:30---17:20

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

实验名称:网络编程(简单的服务器与客户端)

实验目的与要求:

1.掌握Socket的基本使用方法,学会建立Socket连接;

2.掌握简单的服务器和客户端程序,实现客户端和服务器通信;

3.掌握Java网络编程的方法;

实验仪器:

名称

型号

数量

笔记本电脑

DELL

1

一、    实验内容

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

2、    利用加解密代码包,编译运行代码,客户端加密,服务器解密;

3、    客户端加密明文后将密文通过TCP发送;

4、    加密使用DES,DES加密密钥key发送至服务器,使用服务器的公钥加密,公钥算法使用RSA,检验发送信息的完整性使用MD5

实验人员:

服务器  :20135223hwq http://www.cnblogs.com/20135223heweiqin/

客户端  :20135234mqy

二、    实验步骤

1. 组员一用计算机1创建局域网,充当客户端;

2.组员二使用计算机连入局域网并查询自己的IP地址,充当服务器,然后运行服务器代码,即打开服务器;

3.组员一进行客户端组合代码,首先需要连入服务器,按照本机上的IP地址修改代码中的IP地址和端口。然后创建密钥,按照服务器端口号请求连接,连接成功后组员一向组员二发送数据;,从键盘读入数据并加密,检查连接状态。

三、    客户端代码

// file name:ComputeTCPClient.java

import java.net.*;

import java.io.*;

import java.security.*;

import javax.crypto.*;

import javax.crypto.spec.*;

import java.security.spec.*;

import javax.crypto.interfaces.*;

import java.security.interfaces.*;

import java.math.*;

public class ComputeTCPClient {

public static void main(String srgs[]) throws Exception{

try {

KeyGenerator kg=KeyGenerator.getInstance("DESede");

kg.init(168);

SecretKey k=kg.generateKey( );

byte[] ptext2=k.getEncoded();

//String kstr=parseByte2HexStr(kb);

//创建连接特定服务器的指定端口的Socket对象

Socket socket = new Socket("127.28.133.94", 4421);

//获得从服务器端来的网络输入流

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

//获得从客户端向服务器端输出数据的网络输出流

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

//创建键盘输入流,以便客户端从键盘上输入信息

BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

FileInputStream f3=new FileInputStream("Skey_RSA_pub.dat");

ObjectInputStream b2=new ObjectInputStream(f3);

RSAPublicKey  pbk=(RSAPublicKey)b2.readObject( );

BigInteger e=pbk.getPublicExponent();

BigInteger n=pbk.getModulus();

//System.out.println("e= "+e);

//System.out.println("n= "+n);

//byte ptext2[]=kstr.getBytes("UTF8");

BigInteger m=new BigInteger(ptext2);

BigInteger c=m.modPow(e,n);

//System.out.println("c= "+c);

String cs=c.toString( );

out.println(cs);  //通过网络传送到服务器

System.out.print("请输入待发送的数据:");

String s=stdin.readLine(); //从键盘读入待发送的数据

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

cp.init(Cipher.ENCRYPT_MODE, k);

byte ptext[]=s.getBytes("UTF8");

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

String str=parseByte2HexStr(ctext);

out.println(str);  //通过网络传送到服务器

String x=s;

MessageDigest m2=MessageDigest.getInstance("MD5");

m2.update(x.getBytes( ));

byte a[ ]=m2.digest( );

String result="";

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

result+=Integer.toHexString((0x000000ff & a[i]) |

0xffffff00).substring(6);

}

System.out.println(result);

out.println(result);

/*s=result;

FileInputStream f3=new FileInputStream("Skey_RSA_pub.dat");

ObjectInputStream b2=new ObjectInputStream(f3);

RSAPublicKey  pbk=(RSAPublicKey)b2.readObject( );

BigInteger e=pbk.getPublicExponent();

BigInteger n=pbk.getModulus();

//System.out.println("e= "+e);

//System.out.println("n= "+n);

byte ptext2[]=s.getBytes("UTF8");

BigInteger m=new BigInteger(ptext2);

BigInteger c=m.modPow(e,n);

//System.out.println("c= "+c);

String cs=c.toString( );

out.println(cs);  //通过网络传送到服务器*/

str=in.readLine();//从网络输入流读取结果

System.out.println( "从服务器接收到的结果为:"+str); //输出服务器返回的结果

}

catch (Exception e) {

System.out.println(e);

}

finally{

//stdin.close();

//in.close();

//out.close();

//socket.close();

}

}

public static String parseByte2HexStr(byte buf[]) {

StringBuffer sb = new StringBuffer();

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

String hex = Integer.toHexString(buf[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

sb.append(hex.toUpperCase());

}

return sb.toString();

}

public static byte[] parseHexStr2Byte(String hexStr) {

if (hexStr.length() < 1)

return null;

byte[] result = new byte[hexStr.length()/2];

for (int i = 0;i< hexStr.length()/2; i++) {

int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);

int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);

result[i] = (byte) (high * 16 + low);

}

return result;

}

}

四.实验过程截图

四、实验体会

本次实验极大的扩展了我们的视野,使我了解到编写程序不仅仅是一个电脑单机操作的事情,也可以上升到网络层次,引起了我对JAVA极大的兴趣。在实验中,我明白怎样创建客户端和服务器,利用out.println()和in.readline()函数使其进行数据连接和传输。理解了如何对数据进行加密,然后进行传输。

统计的PSP时间:

步骤

耗时(min)

百分比

需求分析

20

10%

设计

30

20%

代码实现

50

40%

测试

20

10%

分析总结

30

20%

转载于:https://www.cnblogs.com/mqy123/p/4570563.html

相关文章:

我的第一张地图报表

一直以来对于地图都很陌生&#xff0c;感觉好强大&#xff0c;可以根据地理位置去分析数据&#xff0c;下面我简单的做了一张地图展示数据的报表。 接下来就简单的说一下设计过程和应该注意的地方 效果&#xff1a;&#xff08;鼠标放在省份区域上&#xff0c;显示该省的数据&a…

SpringBoot第十篇:thymeleaf详解

作者&#xff1a;追梦1819 原文&#xff1a;https://www.cnblogs.com/yanfei1819/p/10931435.html 版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请附上博文链接&#xff01; 引言 SpringBoot 对 Web 的支持&#xff0c;官方推荐的是模板引擎 thymelaf。本章中&…

嵌入式系统开发过程中遇到的——volatile

嵌入式 系统开发过程中遇到的—— volatile 对于不同的计算机体系结构&#xff0c;设备可能是端口映射&#xff0c;也可能是内存映射的 。如果系统结构支持独立的 I/O 地址空间&#xff0c;并且是端口映射&#xff0c;就必须使用汇编语言完成实际对设备的控制&#xff…

薏米红豆粥的功效和实践演示

熬薏米红豆粥有很多技巧和讲究。薏米很硬&#xff0c;红豆也很硬&#xff0c;假设已经煮在锅里&#xff0c;大概熬一个多小时不坏&#xff0c;这是一种浪费火灾或电力&#xff0c;它甚至可以把水烧开&#xff0c;原因症结。我建议的方法有两种&#xff1a;第一种方法是在锅里加…

Java项目:财务预算管理系统(java+SSM+Jsp+Mysql+Layui+Maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括&#xff1a;实现公司对项目的管理。 二、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; …

POJ 3080 多个串最长公共子序列

求多个串最长公共子序列&#xff0c;字典序最小输出。枚举剪枝kmp.比较简单&#xff0c;我用find直接查找16ms #include<iostream> #include<string> #include<algorithm> using namespace std; string s[61]; int main() {int ta;cin>>ta;int n;while…

HDU 2561 第二小整数

2019-05-27 18:07:06 加油&#xff0c;坚持&#xff01;&#xff01;&#xff01; 水题 #include <bits/stdc.h> using namespace std; int a[100]; int main() {int t;scanf("%d", &t);while(t--){int n;scanf("%d", &n);for (int i 0; i …

Java项目:在线高中考试系统(java+SSM+Jsp+Mysql+Maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目分为前台和后台&#xff0c;前台主要为学生角色、后台主要为管理员角色。 管理员添加试题和发布试卷&#xff0c;学生负责在线考试、在线查看成绩和错题记录列表等。 管理员功能有&#xff1a;年级管理…

asp.net mvc 学习

Routing讲解&#xff1a; http://www.cnblogs.com/wangiqngpei557/p/3379095.html Filter讲解&#xff1a; http://www.cnblogs.com/ymnets/p/3452407.html ASP.NET MVC 支持以下类型的操作筛选器&#xff1a; 授权筛选器。 这些筛选器用于实现 IAuthorizationFilter 和做出关于…

Linux数据库性能优化--文件系统相关优化

实际也中也用到下文中所说的内存文件系统1、ramfs 记得是32位文件系统安装oracle 为oracle分配SGA突破1.7G大小限制2、mmap 的文件可以放在tmpfs挂载的文件系统中http://www.ibm.com/developerworks/cn/linux/management/tune/index.html1&#xff0e; 引言实践证明Lin…

jQuery Mobile的学习时间bottonbutton的事件学习

版权声明&#xff1a;本文为博主原创文章。未经博主同意不得转载。https://blog.csdn.net/xmt1139057136/article/details/27700521 程序猿都非常懒&#xff0c;你懂的&#xff01; 生命的绝唱来机仅仅争朝夕&#xff0c;如诗的年华更需惜时如金。不要让今天的懈怠成为一生的痛…

C++中 public,protected, private 访问标号小结

第一&#xff1a;private, public, protected 访问标号的访问范围。 private&#xff1a; 只能由1.该类中的函数、2.其友元函数访问。 不能被任何其他访问&#xff0c;该类的对象也不能访问。 protected&#xff1a; 可以被1.该类中的函数、2.子类的函数、以及3.其友元函数…

Java项目:学生管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统功能包括&#xff1a; 学生管理&#xff0c;教师管理&#xff0c;课程管理&#xff0c;成绩管理&#xff0c;系统管理等等。 二、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 M…

UVA 11752 超级幂

UVA 11752 超级幂 Z - The Super PowersTime Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Practice UVA 11752Description 题意&#xff1a;定义一个数为超级幂&#xff0c;当这个数能表示成至少两个不同数字的幂时。如162^4&#x…

Awstats

c是一个非常简洁而且强大的统计工具。它可以统计您站点的如下信息&#xff1a;一&#xff1a;访问量&#xff0c;访问次数&#xff0c;页面浏览量&#xff0c;点击数&#xff0c;数据流量等精确到每月、每日、每小时的数据二&#xff1a;访问者国家、访问者IP、操作系统、浏览器…

fixture详细介绍-作为参数传入,error和failed区别

前言 fixture是pytest的核心功能&#xff0c;也是亮点功能&#xff0c;熟练掌握fixture的使用方法&#xff0c;pytest用起来才会得心应手&#xff01; fixture简介 fixture的目的是提供一个固定基线&#xff0c;在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统…

哈佛结构和冯诺依曼结构区别。

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容&#xff0c;解码后得到数据地址&#xff0c;再到相应的数据存储 器中读取数据&#xff0c;并进行下一步的操作&#xff08;通常是执行&#xff09;。程序指令存储和…

js 数据函数

//shift&#xff1a;删除原数组第一项&#xff0c;并返回删除元素的值&#xff1b;如果数组为空则返回undefined var a [1,2,3,4,5]; var b a.shift(); //a&#xff1a;[2,3,4,5] b&#xff1a;1 //unshift&#xff1a;将参数添加到原数组开头&#xff0c;并返回数组的长度…

Java项目:平行志愿管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述本系统功能包括&#xff1a; 系统管理&#xff0c;招生计划&#xff0c;学生管理&#xff0c;录取结果&#xff0c;自动分配&#xff0c;调剂管理等等。 二、项目运行 环境配置&#xff1a; J…

冒泡 MS Azure 不便宜。。。

一直在等 MS Azure 中国开卖&#xff0c; 最近有消息说正式商用了。。。 看看去&#xff0c;ok 发现官方网站 很奇葩。没有购买的地方 说毛线 啊 卧槽 欺骗感情还是吊人胃口&#xff1f; 好看了一下VM的价格&#xff0c;卧槽真不便宜。 即使是 768 MB的也要 0.22RMB 小时。本来…

数据库的概念以及MYSQL的安装和卸载

一、数据库的基本概念&#xff1a; 1、什么是数据库&#xff1f; DataBase&#xff0c;简称DB。是用来存储和管理数据的仓库。 2、数据库的特点&#xff1a; 持久化存储数据的。其实数据库就是一个文件系统。方便存储和管理数据使用了统一的方式操作数据库——SQL  3、最热门…

对ARM异常(Exceptions)的理解

对ARM异常&#xff08;Exceptions&#xff09;的理解 1 &#xff0e;对 ARM 异常&#xff08; Exceptions &#xff09;的理解 所有的系统引导程序前面中会有一段类似的代码&#xff0c;如下&#xff1a; .globl _start &#xff1b;系统复位位置 _s…

Java项目:花店商城系统(java+Springboot+Maven+mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统功能包括&#xff1a; 商品的分类展示&#xff0c;用户的注册登录&#xff0c;购物车&#xff0c;订单结算&#xff0c;购物车加减&#xff0c;后台商品管理&#xff0c;分类管理&#x…

简单又好看的按钮,扁平化按钮。

原文 http://blog.csdn.net/peijiangping1989/article/details/19333779主题 安卓开发今天分享一下流行的扁平化按钮。完全不需要用到图片哦。效果图如下&#xff1a; 里面有2个按钮都是一样的模式。只要修改的色值就可以。下面跟我来更新你的UI吧。 首先编写 button.xml 代码…

MahApps.Metro

ModernUI for WPF Mahapps.metro home Mahapps.metro Quick start Mahapps.metro controls转载于:https://www.cnblogs.com/xakml/p/3682173.html

用herl工具解决微信内链接或二维码可直接用外部浏览器打开

很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接&#xff0c;其实这并不难&#xff0c;只要我们实现微信跳转功能即可。 下面给大家推荐 herl工具&#xff08;http://www.nicejump.cn/&#xff09; 使用步骤 1. 用浏览器打开我们的工…

shell之“/dev/null 21”

shell中可能经常能看到&#xff1a;>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 分解这个组合&#xff1a;“>/dev/null 2>&1” 为五部分。 1&#xff1a;> 代表重定向到哪里&#xff0c;例如&#xff1a;echo "123" &g…

Java项目:角色权限后台脚手架系统(java+Springboot+Maven+myBaits-Plus+Vue+Element-UI+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; Springboot框架myBaits-PlusMySQL实现的角色权限后台管理脚手架系统实战项目&#xff0c;实现的是所有系统最基础的后台管理功能&#xff0c;有了这个脚手架&#xff0c;以后开发别的项目就在这上面快速增加…

30+程序员,平时都忙些什么事情?平时都想些什么?以后有啥计划?

很多人都说&#xff0c;30岁以后了&#xff0c;写程序还有前途嘛&#xff1f;我有时候也迷茫&#xff0c;但是迷茫过后&#xff0c;总会给自己寻找方向&#xff0c;每个人都需要有个信念、没有信念&#xff0c;活着就没意思&#xff0c;无聊&#xff0c;觉得没奔头了。 废话少说…

用于制图、写电子邮件、创建条形码控件Aspose.Total

2019独角兽企业重金招聘Python工程师标准>>> Aspose.Total 提供了 Aspose 可以使用的任何组件&#xff0c;以及你每年订阅中发布的所有新组件。通过它&#xff0c;你能够有计划地操纵一些商业中最流行的文件格式&#xff1a;Word, Excel, PowerPoint, Project, PDF …