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 楼答案
他们不一样。通过调用
wrap()
或unwrap()
返回为SSLEngineResult.getHandshakeStatus()
的状态可以包括FINISHED,但您永远不会从SSLEngine.
中存储的状态获得该状态。原因是它是一个暂时状态NB低质量代码。在您刚刚阅读完流的末尾之后,尝试展开或其他任何操作都并没有多大意义