Java實驗報告(實驗五)

課程:Java程序設計                         班級:1351            姓名:王瑋怡      學號:20135116html

成績:             指導教師:婁嘉鵬              實驗日期:2015.6.9java

實驗密級:         預習程度:             實驗時間:15:20-18:00算法

儀器組次:11          必修/選修:                  實驗序號:5編程

實驗名稱:    TCP傳輸及加解密  服務器

實驗內容:網絡

1.運行教材上TCP代碼,結對進行,一人服務器,一人客戶端;併發

2.利用加解密代碼包,編譯運行代碼,一人加密,一人解密;socket

3.集成代碼,一人加密後經過TCP發送;post

注:加密使用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);

        }

    }

}

 截圖:

 

2、遇到的問題及怎樣解決:

將程序包中程序整合時常常容易出現重定義和變量名佔用的問題,此時只須要註銷掉重複定義的部分或者更改變量名便可,但要注意後來引用部分也須要更改變量名

3、實驗感想:

  經過此次實驗,我和同伴最大的收穫是通過不斷努力,將零碎的代碼段拼湊起來並運行出來。過程是複雜的,可是在同窗的幫助和咱們本身的不斷嘗試下,仍是有必定進展。說實話,對於我這樣對編程不太精通的幼兒園級學者來講,網絡鏈接、傳送、反饋上有不少很難的地方,遇到有問題的地方經常感受無從下手,一般即便在上網翻閱不少資料也無濟於事,必定要尋求大神們的幫助才能解決,所以,咱們每次的實驗結果不管怎樣,都是不少人一塊兒的智慧。

 

PSP時間

 

步驟

耗時

百分比

需求分析

 1h

 16.7%

設計

 1h  16.7%

代碼實現

 2h  33.2%

測試

 1h  16.7%

分析總結

 1h  16.7%
相關文章
相關標籤/搜索