自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java Socket實(shí)戰(zhàn)之五:使用加密協(xié)議傳輸對(duì)象

開(kāi)發(fā) 后端
前面幾篇博文提到了Socket中一些常用的用法,但是對(duì)于一些有安全要求的應(yīng)用就需要加密傳輸?shù)臄?shù)據(jù),此時(shí)就需要用到SSLSocket了。

前面幾篇博文提到了Socket中一些常用的用法,但是對(duì)于一些有安全要求的應(yīng)用就需要加密傳輸?shù)臄?shù)據(jù),此時(shí)就需要用到SSLSocket了。

還是一樣需要一個(gè)實(shí)現(xiàn)了java.io.Serializable接口的簡(jiǎn)單Java對(duì)象:

  1. package com.googlecode.garbagecan.test.socket.ssl;  
  2.  
  3. public class User implements java.io.Serializable {  
  4.     private static final long serialVersionUID = 1L;  
  5.     private String name;  
  6.     private String password;  
  7.  
  8.     public User() {  
  9.           
  10.     }  
  11.       
  12.     public User(String name, String password) {  
  13.         this.name = name;  
  14.         this.password = password;  
  15.     }  
  16.       
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.  
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24.  
  25.     public String getPassword() {  
  26.         return password;  
  27.     }  
  28.  
  29.     public void setPassword(String password) {  
  30.         this.password = password;  
  31.     }  
  32.       

SSL Server類(lèi),這里需要用到ServerSocketFactory類(lèi)來(lái)創(chuàng)建SSLServerSocket類(lèi)實(shí)例,然后在通過(guò)SSLServerSocket來(lái)獲取SSLSocket實(shí)例,這里考慮到面向?qū)ο笾械拿嫦蚪涌诰幊痰睦砟睿源a中并沒(méi)有出現(xiàn)SSLServerSocket和SSLSocket,而是用了他們的父類(lèi)ServerSocket和Socket。在獲取到ServerSocket和Socket實(shí)例以后,剩下的代碼就和不使用加密方式一樣了。

  1. package com.googlecode.garbagecan.test.socket.ssl;  
  2.  
  3. import java.io.BufferedInputStream;  
  4. import java.io.IOException;  
  5. import java.io.ObjectInputStream;  
  6. import java.io.ObjectOutputStream;  
  7. import java.net.ServerSocket;  
  8. import java.net.Socket;  
  9. import java.util.logging.Level;  
  10. import java.util.logging.Logger;  
  11.  
  12. import javax.net.ServerSocketFactory;  
  13. import javax.net.ssl.SSLServerSocketFactory;  
  14.  
  15. public class MyServer {  
  16.       
  17.     private final static Logger logger = Logger.getLogger(MyServer.class.getName());  
  18.       
  19.     public static void main(String[] args) {  
  20.         try {  
  21.             ServerSocketFactory factory = SSLServerSocketFactory.getDefault();  
  22.             ServerSocket server = factory.createServerSocket(10000);  
  23.               
  24.             while (true) {  
  25.                 Socket socket = server.accept();  
  26.                 invoke(socket);  
  27.             }  
  28.         } catch (Exception ex) {  
  29.             ex.printStackTrace();  
  30.         }  
  31.     }  
  32.       
  33.     private static void invoke(final Socket socket) throws IOException {  
  34.         new Thread(new Runnable() {  
  35.             public void run() {  
  36.                 ObjectInputStream is = null;  
  37.                 ObjectOutputStream os = null;  
  38.                 try {  
  39.                     is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));  
  40.                     os = new ObjectOutputStream(socket.getOutputStream());  
  41.  
  42.                     Object obj = is.readObject();  
  43.                     User user = (User)obj;  
  44.                     System.out.println("user: " + user.getName() + "/" + user.getPassword());  
  45.  
  46.                     user.setName(user.getName() + "_new");  
  47.                     user.setPassword(user.getPassword() + "_new");  
  48.  
  49.                     os.writeObject(user);  
  50.                     os.flush();  
  51.                 } catch (IOException ex) {  
  52.                     logger.log(Level.SEVERE, null, ex);  
  53.                 } catch(ClassNotFoundException ex) {  
  54.                     logger.log(Level.SEVERE, null, ex);  
  55.                 } finally {  
  56.                     try {  
  57.                         is.close();  
  58.                     } catch(Exception ex) {}  
  59.                     try {  
  60.                         os.close();  
  61.                     } catch(Exception ex) {}  
  62.                     try {  
  63.                         socket.close();  
  64.                     } catch(Exception ex) {}  
  65.                 }  
  66.             }  
  67.         }).start();  
  68.     }  

SSL Client類(lèi)和SSL Server類(lèi)類(lèi)似,只是將其中獲取Socket的方式有所變化,其余的代碼也和不使用加密方式一樣。

  1. package com.googlecode.garbagecan.test.socket.ssl;  
  2.  
  3. import java.io.BufferedInputStream;  
  4. import java.io.IOException;  
  5. import java.io.ObjectInputStream;  
  6. import java.io.ObjectOutputStream;  
  7. import java.net.Socket;  
  8. import java.util.logging.Level;  
  9. import java.util.logging.Logger;  
  10.  
  11. import javax.net.SocketFactory;  
  12. import javax.net.ssl.SSLSocketFactory;  
  13.  
  14. public class MyClient {  
  15.       
  16. private final static Logger logger = Logger.getLogger(MyClient.class.getName());  
  17.  
  18.     public static void main(String[] args) throws Exception {  
  19.         for (int i = 0; i < 100; i++) {  
  20.             Socket socket = null;  
  21.             ObjectOutputStream os = null;  
  22.             ObjectInputStream is = null;  
  23.               
  24.             try {  
  25.                 SocketFactory factory = SSLSocketFactory.getDefault();  
  26.                 socket = factory.createSocket("localhost"10000);  
  27.       
  28.                 os = new ObjectOutputStream(socket.getOutputStream());  
  29.                 User user = new User("user_" + i, "password_" + i);  
  30.                 os.writeObject(user);  
  31.                 os.flush();  
  32.                   
  33.                 is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));  
  34.                 Object obj = is.readObject();  
  35.                 if (obj != null) {  
  36.                     user = (User)obj;  
  37.                     System.out.println("user: " + user.getName() + "/" + user.getPassword());  
  38.                 }  
  39.             } catch(IOException ex) {  
  40.                 logger.log(Level.SEVERE, null, ex);  
  41.             } finally {  
  42.                 try {  
  43.                     is.close();  
  44.                 } catch(Exception ex) {}  
  45.                 try {  
  46.                     os.close();  
  47.                 } catch(Exception ex) {}  
  48.                 try {  
  49.                     socket.close();  
  50.                 } catch(Exception ex) {}  
  51.             }  
  52.         }  
  53.     }  

代碼寫(xiě)完了,下面就需要產(chǎn)生keystore文件了,運(yùn)行下面的命令

  1. keytool -genkey -alias mysocket -keyalg RSA -keystore mysocket.jks 

在提示輸入項(xiàng)中,密碼項(xiàng)自己給定,其它都不改直接回車(chē),這里我使用的密碼是“mysocket”。

運(yùn)行Server

  1. java -Djavax.net.ssl.keyStore=mysocket.jks -Djavax.net.ssl.keyStorePassword=mysocket com.googlecode.garbagecan.test.socket.ssl.MyServer 

運(yùn)行Client

  1. java -Djavax.net.ssl.trustStore=mysocket.jks  -Djavax.net.ssl.trustStorePassword=mysocket com.googlecode.garbagecan.test.socket.ssl.MyClient 

原文鏈接:http://blog.csdn.net/kongxx/article/details/7259837

【編輯推薦】

  1. Java Socket實(shí)戰(zhàn)之四:傳輸壓縮對(duì)象
  2. Java Socket實(shí)戰(zhàn)之三:傳輸對(duì)象
  3. Java Socket實(shí)戰(zhàn)之二:多線程通信
  4. Java Socket實(shí)戰(zhàn)之一:?jiǎn)尉€程通信
  5. Java多線程之消費(fèi)者生產(chǎn)者模式
責(zé)任編輯:林師授 來(lái)源: kongxx的博客
相關(guān)推薦

2012-02-15 10:40:37

JavaJava Socket

2012-02-15 10:37:38

JavaJava Socket

2010-04-01 16:03:15

無(wú)線加密協(xié)議無(wú)線網(wǎng)卡

2010-04-01 16:09:17

無(wú)線加密協(xié)議兼容

2010-07-13 14:41:14

2010-09-27 16:43:57

2012-05-03 10:55:51

ApacheMINAJava

2010-07-07 10:31:45

2009-11-07 13:40:07

2010-07-26 09:47:14

2010-06-28 14:38:12

FTP協(xié)議

2010-09-07 10:57:54

2012-05-03 11:35:56

ApacheCXFJava

2009-01-11 09:24:00

2010-09-29 08:31:23

2012-05-07 14:15:41

ApacheCXFJava

2024-02-23 18:33:48

2022-02-17 15:41:31

微軟Windows 11加密協(xié)議

2010-06-28 11:15:45

BitTorrent協(xié)

2010-01-07 16:29:33

使用Json
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)