2013-02-28 1 views
1

java에서 SSLEngine과의 클라이언트/서버 연결을 생성하려고합니다. SSLEngine.getHandshakeStatus()SSLEngineResults.getHandshakeStatus().의 차이점을 묻습니다. Nuno Santos의 샘플 코드는 SSLEngine이고 NIO API와 멀티플렉싱됩니다.SSLEngine의 getHandShakeStatus()와 java의 SSLEngineResults의 차이점

코드 난에 참조는 다음과 같습니다

    //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

답변

0

이들은 동일하지 않습니다. wrap() 또는 unwrap()으로 전화하여 SSLEngineResult.getHandshakeStatus()으로 반환 된 상태는 FINISHED를 포함 할 수 있지만 SSLEngine.에 저장된 상태에서는 절대로 알 수 없습니다. 이는 일시적인 상태이기 때문입니다.

NB 품질이 좋지 않은 코드입니다. 스트림의 끝 부분을 읽은 후에 언 랩 또는 다른 것을 시도하는 데는별로 중요하지 않습니다.

관련 문제