实验内容

1.掌握Socket程序的编写;

2.掌握密码技术的使用;

3.设计安全

4、对通信内容进行摘要计算并验证

实验步骤

1.信息安全传送:

发送方A——————>接收方B

A加密时,用B的公钥

B解密时,用B的私钥

  发送方A对信息(明文)采用DES密钥加密,使用RSA加密前面的DES密钥信息,最终将混合信息进行传递。同时用hash函数将明文进行用作验证。

    接收方B接收到信息后,用RSA解密DES密钥信息,再用RSA解密获取到的密钥信息解密密文信息,最终就可以得到我们要的信息(明文)。用hash函数对解出的明文进行验证,与发送过来的hash值相等,验证通过。

2.实验代码:

客户端代码:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package client;

// file name:ComputeTCPClient.java
import java.net.*;
import java.io.*;
import java.security.*;

public class Main
{
public static void main(String srgs[])
{
try
{
testdes DES = new testdes();
//创建连接特定服务器的指定端口的Socket对象
Socket socket = new Socket("127.0.0.1", 8002);
//获得从服务器端来的网络输入流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获得从客户端向服务器端输出数据的网络输出流
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
ObjectOutputStream o1 = new ObjectOutputStream(socket.getOutputStream());
//PrintWriter out2=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
//创建键盘输入流,以便客户端从键盘上输入信息
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入待发送的数据:");
String str=stdin.readLine(); //从键盘读入待发送的数据
String str2;//存校验码
MyDigest MD = new MyDigest();
MD.getDigest("SHA-1");
str2 = MD.toDigestString(str, "SHA-1");
System.out.println("校验码是:"+str2);

byte[] cipher = DES.encrypt(str);

out.println(str); //通过网络传送字符到服务器
out.println(str2);//传送校验信息到服务器
//System.out.println("test:"+cipher);
o1.writeObject(cipher);//传送加密信息到服务器

//System.out.println(cipher);
/*为了演示,把明文和密文都通过网络传输,实际只传密文,密钥通过保密信道单独传输*/

str=in.readLine();//从网络输入流读取结果
System.out.println( "从服务器接收到的结果为:"+str); //输出服务器返回的结果
}
catch (Exception e)
{
System.out.println(e);
}
}

}

服务器代码:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package server;

/**
*
* @author RockStone
*/
// file name:ComputeTCPServer.java
import java.net.*;
import java.io.*;
public class Main
{
public static void main(String srgs[])
{
ServerSocket sc = null;
Socket socket=null;
try
{
sc= new ServerSocket(8002);//创建服务器套接字
System.out.println("端口号:" + sc.getLocalPort());
System.out.println("服务器已经启动...");
socket = sc.accept(); //等待客户端连接
System.out.println("已经建立连接");
//获得网络输入流对象的引用
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ObjectInputStream in1 = new ObjectInputStream(socket.getInputStream());
////获得网络输出流对象的引用
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
String aline=in.readLine();//读取客户端传送来的数据
String aline2 = in.readLine();//读校验码
byte[] C=(byte[])in1.readObject();//读密文

MyDigest MD = new MyDigest();
MyDigest.getDigest("SHA-1");
String MDresult = MyDigest.toDigestString(aline, "SHA-1");//校验
if(aline2.equals(MDresult))
{
System.out.println("信息传输正确");
System.out.println("校验信息是:"+MDresult);
}
else
System.out.println("效验码不一致!");

//服务器解密
testdes show = new testdes();
show.decryption(C);

System.out.println("从客户端接收到信息为:"+aline); //通过网络输出流返回结果给客户端
out.println(aline);
out.close();
in.close();
sc.close();
}
catch (Exception e)
{
System.out.println(e);
}

}

}

实验测试:

客户端:

服务器:

实验所遇问题和解决方法

Question 1. 两台电脑一直无法联通

一开始根本不知道如何将两台电脑进行这次实验。

答:使用对方电脑IP就行了。用一台电脑连接网络然后wifi给另一台电脑使用,然后再次连接两台电脑,终于连通成功了。

Question 2. 显示连通了之后,客户端向服务器发送消息,但是显示有异常。

答:将端口换了一个变成端口8080之后,再次连接发送消息,成功。

实验体会:

  本次实验让我明白了java不仅仅是单机“游戏”,也可以上升到网络层次,引起了我对JAVA极大的兴趣。在实验过程中,我明白怎样创建客户端和服务器,同时利用out.println()和in.readline()函数使其进行数据连接和传输。实验的难点在于如何对数据进行加解密,然后进行传输。本次实验收获很多。

Java实验四 TCP客户端和服务器的应用的更多相关文章

  1. Java实验四

    20145113 Java实验四 快捷键 之前没怎么记ISDEA的快捷键,但是熟练使用快捷键可以带来很多的便利,于是先开始学习一些常用的快捷键,就采用它默认的快捷键,这样后期就不会出现冲突,一些and ...

  2. 20165324 Java实验四 Android程序设计

    20165324 Java实验四 Android程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年5月1 ...

  3. [JAVA] Tcp客户端和服务器简单代码

    服务器: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; im ...

  4. Java实验四和实验五

    实验四 类的继承性和多态性 [开发语言及实现平台或实验环境] Windows2000 或XP,JDK1.6与Jcreator4.0 [实验目的] 1.  掌握OOP方式进行程序设计的方法, 2.  了 ...

  5. 《Java实验四》

    //实验4--附录一代码 public class PassValueTest { //静态代码块,类一加载就执行的部分. //所以运行这个程序会输出 class loding static { Sy ...

  6. Java网络编程(TCP客户端)

    TCP传输:两个端点建立连接后会有一个传输数据的通道,这个通道就称为流,而且是建立在网络基础上的流,之为socket流,该流中既可以读取也可以写入. TCP的两个端点:一个客户端:ServerSock ...

  7. #20165323 Java实验四 Android程序设计

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:13:45 - 15:25 实验序号:实验 ...

  8. 20165326 java实验四

    20165326实验四-Android程序设计 一:Android Stuidio的安装测试 1.安装Android Stuidio 具体跟着教程走就行主要是配置的时候要选择下载SDK或手动配置,详细 ...

  9. 20165310 Java实验四 《Android程序设计》

    20165310 实验四 <Android程序设计> 第24章:初识Android 任务一:改写res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号 首 ...

随机推荐

  1. C++中const用法总结

    1修饰变量/指针 注意以下几种修饰的区别: (1)const int * a; (2)int const *a; (3)int * const b; (4)int const* const c; 其中 ...

  2. Struts2 Spring Hibernate等各个版本下载推荐

    推荐jar包下载地址: http://mvnrepository.com/ 应有尽有

  3. 第一篇 UEditor入门部署和体验

    UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. UEditor富文本编辑器,轻量, ...

  4. Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例

    利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...

  5. Linux系统之压缩、解压缩,vi编辑器,系统初始化服务和系统监控

    一.正文处理,压缩与解压缩 1.内容重定向>与>> >:覆盖,将>号左边的结果覆盖到>号右边的文件中,如果文件不存在,则先创建一个新的空文件并覆盖 >> ...

  6. Linux traceroute

    一.简介 traceroute 通过发送 TCP 数据包向目标端口进行探测,以检测源到目标服务器的整个链路上相应端口的连通性情况.   二.语法 -n 直接使用IP地址而非主机名称(禁用 DNS 反查 ...

  7. nagios 自定义插件demo

    #!/bin/bash loadavg=$( uptime | awk -F: '{print $4}' | xargs ) load1int=$( ) load5int=$( ) load15int ...

  8. 【MVC 4】2.使用 Razor

    作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> Razor 是微软 MVC3 引入的视图引擎的名称,并在MVC 4 中进行了修订.视图引擎处理 A ...

  9. 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2

    1732 Fibonacci数列 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 在“ ...

  10. POJ 1990 MooFest --树状数组

    题意:牛的听力为v,两头牛i,j之间交流,需要max(v[i],v[j])*dist(i,j)的音量.求所有两两头牛交谈时音量总和∑(max(v[i],v[j])*abs(x[j]-x[i])) ,x ...