本文实例讲述了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使用加密协议进行传输对象的方法