1

Java で SSLEngine を使用してクライアント/サーバー接続を作成しようとしています。SSLEngine.getHandshakeStatus()何が違うのかお聞きしたいのですが、NIO API との多重化SSLEngineResults.getHandshakeStatus().に関する Nuno Santos のサンプル コードを見つけました。SSLEngine

私が参照するコードは次のとおりです。

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

サンプルコードはリソースセクションにあります

前もって感謝します!

4

1 に答える 1

0

それらは同じではありません。SSLEngineResult.getHandshakeStatus()呼び出しによって返されるステータスには FINISHED を含めることができますが、 に格納されているステータスから取得することはできませんwrap()。これは一時的なステータスであるためです。unwrap()SSLEngine.

注意: 低品質のコードです。ストリームの終わりを読んだだけで、アンラップなどを試してもあまり意味がありません。

于 2013-08-26T04:07:37.193 に答える