Java Socket使用加密协议进行传输对象的方法

  

本文实例讲述了Java Socket使用加密协议进行传输对象的方法。分享给大家供大家参考,具体如下:

  

前面的几篇文章介绍了套接字中一些常见的用法,但是对于一些有安全要求的应用就需要加密传输的数据,此时就需要用到SSLSocket了。

  

还是一样需要一个实现了Java.io.Serializable接口的简单Java对象

        包com.googlecode.garbagecan.test.socket.ssl;   公共java类用户实现。可序列化的{   私有静态最终长serialVersionUID l=1;   私人字符串名称;   私人密码字符串;   公共用户(){   }   公共用户(字符串名称字符串密码){   this.name=名称;   这一点。密码=密码;   }   公共字符串getName () {   返回名称;   }   公共空间setName(字符串名称){   this.name=名称;   }   公共字符串getPassword () {   返回密码;   }   公共空间向setPassword(字符串密码){   这一点。密码=密码;   }   }      之前      

SSL服务器类,这里需要用到ServerSocketFactory类来创建SSLServerSocket类实例,然后在通过SSLServerSocket来获取SSLSocket实例,这里考虑到面向对象中的面向接口编程的理念,所以代码中并没有出现SSLServerSocket和SSLSocket,而是用了他们的父类考察和插座。在获取到ServerSocket和套接字实例以后,剩下的代码就和不使用加密方式一样了。

        包com.googlecode.garbagecan.test.socket.ssl;   进口java.io.BufferedInputStream;   进口java.io.IOException;   进口java.io.ObjectInputStream;   进口java.io.ObjectOutputStream;   进口java.net.ServerSocket;   进口java.net.Socket;   进口java.util.logging.Level;   进口java.util.logging.Logger;   进口javax.net.ServerSocketFactory;   进口javax.net.ssl.SSLServerSocketFactory;   公开课MyServer {   私人最终静态日志记录器=Logger.getLogger (MyServer.class.getName ());   公共静态void main (String [] args) {   尝试{   ServerSocketFactory工厂=SSLServerSocketFactory.getDefault ();   考察一下服务器=factory.createServerSocket (10000);   而(真){   Socket套接字=server.accept ();   调用(插座);   }   }捕捉(例外的前女友){   ex.printStackTrace ();   }   }   私有静态调用无效(最后一个Socket套接字)抛出IOException {   新线程(新Runnable () {   公共空间run () {   ObjectInputStream=零;   ObjectOutputStream os=零;   尝试{   是=new ObjectInputStream(新BufferedInputStream (socket.getInputStream ()));   操作系统=new ObjectOutputStream (socket.getOutputStream ());   对象obj=is.readObject ();   用户用户=(用户)obj;   system . out。println(“用户:”+ user.getName () + " + user.getPassword ());   user.setName (user.getName () +“_new”);   user.setPassword (user.getPassword () +“_new”);   os.writeObject(用户);   os.flush ();   }捕捉(IOException ex) {   logger.log(水平。严重,null,交货);   }捕捉(ClassNotFoundException特异){   logger.log(水平。严重,null,交货);   最后}{   尝试{   is.close ();   }捕捉(例外的前女友){}   尝试{   os.close ();   }捕捉(例外的前女友){}   尝试{   socket.close ();   }捕捉(例外的前女友){}   }   }   }) .start ();   }   }      之前      

SSL客户机类和SSL服务器类类似,只是将其中获取套接字的方式有所变化,其余的代码也和不使用加密方式一样。

        包com.googlecode.garbagecan.test.socket.ssl;   进口java.io.BufferedInputStream;   进口java.io.IOException;   进口java.io.ObjectInputStream;   进口java.io.ObjectOutputStream;   进口java.net.Socket;   进口java.util.logging.Level;   进口java.util.logging.Logger;   进口javax.net.SocketFactory;   进口javax.net.ssl.SSLSocketFactory;   公开课MyClient {   私人最终静态日志记录器=Logger.getLogger (MyClient.class.getName ());   公共静态void main (String [] args){抛出异常   for (int i=0;我& lt;100;我+ +){   Socket套接字=零;   ObjectOutputStream os=零;   ObjectInputStream=零;   尝试{   SocketFactory工厂=SSLSocketFactory.getDefault ();   套接字=工厂。createSocket (“localhost”, 10000);   操作系统=new ObjectOutputStream (socket.getOutputStream ());   用户用户=新用户(“user_”+我,“password_”+ i);   os.writeObject(用户);   os.flush ();   是=new ObjectInputStream(新BufferedInputStream (socket.getInputStream ()));   对象obj=is.readObject ();   如果(obj !=null) {   用户=(用户)obj;   system . out。println(“用户:”+ user.getName () + " + user.getPassword ());   }   }捕捉(IOException ex) {   logger.log(水平。严重,null,交货);   最后}{   尝试{   is.close ();   }捕捉(例外的前女友){}   尝试{   os.close ();   }捕捉(例外的前女友){}   尝试{   socket.close ();   }捕捉(例外的前女友){}   }   }   }   }      

Java Socket使用加密协议进行传输对象的方法