Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          /********************************************************************
           * 項目名稱    :rochoc   <p>
           * 包名稱      :rochoc.net.security <p>
           * 文件名稱    :SSLServer   <p>
           * 編寫者      : LuckyStar    <p>
           * 編寫日期    :2008-2-13    <p>
           * 程序功能(類)描述 :用于安全通訊的服務Socket,采用java中的SSLServerSocket<p>
           *
           * 程序變更日期   :
           * 變更作者    :
           * 變更說明    :
          *******************************************************************
          */
          package rochoc.net.security;

          import java.io.FileInputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.net.Socket;
          import java.security.KeyStore;
          import java.security.SecureRandom;

          import javax.net.ssl.KeyManagerFactory;
          import javax.net.ssl.SSLContext;
          import javax.net.ssl.SSLServerSocket;
          import javax.net.ssl.TrustManagerFactory;

          /**
           * 類名:SSLServer  <p>
           * 類描述:安全通訊的服務端 <p>
           * 編寫者 :luoc<p>
           * 編寫日期 :2005-6-30<p>
           * 主要public成員變量:<p>
           * 主要public方法:   <p>
           *
          */

          public class SSLServer implements Runnable
          {
              
          /**
               *構造函數說明:       <p>
               *參數說明:   <p>
              *
          */
              
          public SSLServer()
              {       
                  init();
              }
             
              
          /**
              * 方法名稱:init<p>
              * 方法功能:初始化服務Socket            <p>
              * 參數說明: <p>
              * 返回:void <p>
              * 作者:luoc
              * 日期:2005-6-30
              *
          */
              
          public void init()
              {
                  String type
          ="TLS";//類型
                  String keyf="..\\key\\srvstore";//key文件路徑
                  String trustf="..\\key\\mytrust";
                  String pass
          ="123456";//密碼
                  int port=2001;//端口
                  try
                  {
                      
          //初始化上下文
                      SSLContext ctx=SSLContext.getInstance(type);
                      KeyManagerFactory kmf
          =KeyManagerFactory.getInstance("SunX509");
                      TrustManagerFactory tmf
          =TrustManagerFactory.getInstance("SunX509");           
                      KeyStore ks
          =KeyStore.getInstance("JKS");
                      KeyStore tks
          =KeyStore.getInstance("JKS");
                      
          //載入keystore
                      ks.load(new FileInputStream(keyf),pass.toCharArray());
                      tks.load(
          new FileInputStream(trustf),pass.toCharArray());
                      kmf.init(ks,pass.toCharArray());
                      tmf.init(tks);
                      ctx.init(kmf.getKeyManagers(),tmf.getTrustManagers(),
          new SecureRandom());
                      ss
          =(SSLServerSocket)ctx.getServerSocketFactory().createServerSocket(port);
                      ss.setNeedClientAuth(
          true);//客戶端要認證
                  }catch (Exception e) {
                e.printStackTrace();
               }       
              }
             
              
          /**
              * 方法名稱:newListener<p>
              * 方法功能:創建服務器監聽            <p>
              * 參數說明: <p>
              * 返回:void <p>
              * 作者:luoc
              * 日期:2005-6-30
              *
          */
              
          private void newListener()
              {
                  (
          new Thread(this)).start();
              }
             
              
          /**
               * 重載方法:run 處理客戶端的請求<p>
               * 參閱:
          @see java.lang.Runnable#run() <p>
               * 參數說明: <p>
              *
          */
              
          public void run()
              {
                  Socket socket
          =null;
                  
          //accept a connection
                  try
                  {
                      socket
          =ss.accept();
                  }
          catch(IOException e)
                  {
                      System.out.println(
          "Class Server died: " + e.getMessage());
                   e.printStackTrace();
                   
          return;
                  }
                 
                  
          //create a new thread to accept the next connection
                  newListener();
                 
                  
          //process connection
                  try
                  {
                      OutputStream out
          =socket.getOutputStream();
                      InputStream in
          =socket.getInputStream();
                      
          //read data from client    
                      byte buff[]=new byte [512]; 
                      
          byte data[]=new byte [1024];
                      System.out.println(
          "buff len="+buff.length);
                      
          int len=0;
                      
          int startpos=0;
                      
          while((len=in.read(buff))!=-1)
                      {
                          
          //讀聯歡數據               
                          if(len==1 && buff[0]==TranTool.DATA_END)//數據結束標志
                              break;
                          data
          =TranTool.byteDynExt(data,buff,len,startpos);
                          System.out.println(
          "read len:"+len+" data:["+new String(buff,0,len)+"]");
                          startpos
          +=len;
                      }              
                      System.out.println(
          "recv from client:[");                                  
                      System.out.print(
          new String(data,0,startpos));           
                      System.out.println(
          "] data end.");
                      
          //send message to client
                      out.write((startpos+" data success receive.").getBytes());
                      out.write(TranTool.DATA_END);
                      System.out.println(
          "success echo is send.");
                      out.flush();
                  }
          catch(IOException e)
                  {
                      e.printStackTrace();
                
          return;
                  }
          finally
                  {
                      
          try
                      {
                    socket.close();
                   } 
          catch (IOException e)
                   {}
                  }
              }   
             
              
          /*全局變量*/  
              SSLServerSocket ss
          =null;
             
              
          //測試函數
              public static void main(String args[])
              {
                  System.out.println(
          "init SSLServer");
                  SSLServer srv
          =new SSLServer();
                  
          new Thread(srv).start();      
                  System.out.println(
          "SSLServer listener begin.");
              }
          }
          posted on 2008-02-13 22:08 禮物 閱讀(539) 評論(0)  編輯  收藏 所屬分類: CA
          主站蜘蛛池模板: 新密市| 大关县| 茂名市| 安康市| 乌兰县| 绥棱县| 梓潼县| 黄大仙区| 西盟| 涿鹿县| 如皋市| 甘南县| 枣阳市| 连江县| 海安县| 于都县| 东至县| 定州市| 南投市| 望谟县| 远安县| 高平市| 澄城县| 临清市| 饶阳县| 阿坝县| 沂水县| 桓仁| 临武县| 隆尧县| 龙海市| 陆河县| 阳城县| 龙岩市| 雷波县| 扎囊县| 湟中县| 怀柔区| 图片| 威宁| 车险|