2013-02-28 42 views
1

我想用java中的SSLEngine創建一個客戶端/服務器連接。我想問一下SSLEngine.getHandshakeStatus()SSLEngineResults.getHandshakeStatus().之間的區別是什麼我找到了一個N​​uno Santos的示例代碼,關於SSLEngine和使用NIO API進行復用。在Java中的SSLEngine和SSLEngineResults中的getHandShakeStatus()的區別

的代碼,我指的是:

    //some code here 
        SSLEngineResult.HandshakeStatus hs = engine.getHandshakeStatus(); 
        String clientString = ""; 

        while (hs != SSLEngineResult.HandshakeStatus.FINISHED && hs != SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING) 
        { 
         switch (hs) 
         { 
         case NEED_UNWRAP: 
          if (socketChannel.read(peerNetData)< 0) 
          { 
           engine.closeInbound(); 
          } 
          peerNetData.flip(); 
          SSLEngineResult res = engine.unwrap(peerNetData, peerAppData); 
          peerNetData.compact(); 
          hs = res.getHandshakeStatus(); 
          switch (res.getStatus()) 
          { 
          case OK: 
          //TODO something 
           break; 
          case BUFFER_UNDERFLOW: 
         //TODO something 
           break; 
          case BUFFER_OVERFLOW: 
          //TODO something 
           break; 
          case CLOSED: 
          //TODO something 
           engine.closeInbound(); 
           break; 
          } 
          break; 
          //more code here 

與我找到了代碼的鏈接是: http://onjava.com/pub/a/onjava/2004/11/03/ssl-nio.html?page=last&x-order=date

的示例代碼在參考資料部分

提前致謝!

+0

他們應該是一樣的,但我懷疑你會需要'SSLEngine.getHandshakeStatus()'。 – irreputable 2013-02-28 17:16:57

回答

0

它們不一樣。狀態SSLEngineResult.getHandshakeStatus()通過調用wrap()unwrap()返回的狀態可以包含FINISHED,但您永遠不會從存儲在SSLEngine.中的狀態獲取該狀態,原因是這是暫時狀態。

NB劣質代碼。閱讀完流後,嘗試打開包裝或其他任何內容都沒有多大意義。