有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

SSLEngine中getHandShakeStatus()的握手差异和java中SSLenginResults的握手差异

我正在尝试用java中的SSLEngine创建客户机/服务器连接。我想问一下SSLEngine.getHandshakeStatus()SSLEngineResults.getHandshakeStatus().之间的区别是什么。我找到了Nuno Santos关于SSLEngine和使用NIO API进行多路复用的示例代码

我指的代码是:

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

示例代码位于参考资料部分

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    他们不一样。通过调用wrap()unwrap()返回为SSLEngineResult.getHandshakeStatus()的状态可以包括FINISHED,但您永远不会从SSLEngine.中存储的状态获得该状态。原因是它是一个暂时状态

    NB低质量代码。在您刚刚阅读完流的末尾之后,尝试展开或其他任何操作都并没有多大意义