20145304 实验五实验报告

本文介绍了使用Java进行网络编程及密码技术应用的实验过程。包括客户端与服务器端的连接建立、随机密钥生成与交换等关键技术环节,并分享了实验过程中遇到的问题及解决方法。

实验五 Java网络编程及安全

实验内容

  • 实现TCP网络通讯方式,结对进行实验,一人服务器,一人客户端。
  • 掌握密码技术的使用。

实验步骤(客户端)

  • 1.学习Java网络编程,了解一些网络编程的基本概念,查询服务器电脑的IP地址。
    885278-20160508211512530-434512365.png

  • 2.产生随机密钥,输入加密:
        KeyGenerator kg=KeyGenerator.getInstance("DESede");
        kg.init(168);
        SecretKey k=kg.generateKey( );
        FileOutputStream  f=new FileOutputStream("key1.dat");
        ObjectOutputStream b=new  ObjectOutputStream(f);
        b.writeObject(k);
        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);
        // 打印密钥编码中的内容
        for(int i=0;i<kb.length;i++){
             System.out.print(kb[i]+",");
        }
  • 3.建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接。
        Socket socket = new Socket("172.20.10.4", 1125);
        Socket socket1 = new Socket("172.20.10.4", 1126);
  • 4.交换数据,数据传输功能由Java IO实现。
            //获得从服务器端来的网络输入流
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //获得从客户端向服务器端输出数据的网络输出流
            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
            PrintWriter out1 = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
            //创建键盘输入流,以便客户端从键盘上输入信息
            //BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("正在读取文件\n");
            FileInputStream f1 = new FileInputStream("key1.dat");
            FileInputStream f3 = new FileInputStream("SEnc.dat");
            //String str=stdin.readLine(); //从键盘读入待发送的数据
            String str;
            out.println(f1);  //通过网络传送到服务器
            out1.println(f3);
            System.out.print("已发送\n");
            str = in.readLine();//从网络输入流读取结果
            System.out.println("从服务器接收到的结果为:" + str); //输出服务器返回的结果    
        catch (Exception e) {
            System.out.println(e);
        }
        
  • 5.在服务器端通信完成以后,关闭服务器端连接。
       finally{
            //stdin.close();
            //in.close();
            //out.close();
            //socket.close();           
        }
  • 6.结果截图
    885278-20160508213619780-381678161.png

实验中遇到的问题及解决过程

  • 连接时显示无法成功连接。
    解决方法:
    1.既然没有显示代码错误,问题应该出现在连接的部分;
    2.查看IP地址和端口号,发现IP地址错误;
    3.重新输入IP地址,再运行。
  • 连接时显示java.net.ConnectException: Connection timed out: connect
    885278-20160508211034640-1139594261.png

    解决方法:感觉是连接超时,但一直出现这个问题,换了无线网继续试。

    PSP

    步骤耗时百分比
    需求分析20分钟12.5%
    设计60分钟37.5%
    代码实现40分钟25%
    测试10分钟6%
    分析总结30分钟18%

    实验体会

    通过此次实验,尝试了用Java语言进行加密和解密,服务器和客户端。学习了一些网络编程的知识,通过实践,对其有了更深的印象。

    结对伙伴

  • 20145315 http://www.cnblogs.com/5315hejialei/p/5471396.html

转载于:https://www.cnblogs.com/LLLLLLQL/p/5471337.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值