我正在尝试在Java中使用SSLEngine创建客户端/服务器连接。我想问一下SSLEngine.getHandshakeStatus()
和SSLEngineResults.getHandshakeStatus().
有什么区别?我找到了有关SSLEngine
和与NIO API复用的Nuno Santos的示例代码。
我引用的代码是:
//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
该示例代码在“资源”部分中
提前致谢!
最佳答案
他们不一样。通过调用SSLEngineResult.getHandshakeStatus()
或wrap()
返回为unwrap()
的状态可以包括FINISHED,但是您永远不会从SSLEngine.
中存储的状态中获得该状态。原因是它是瞬时状态。
NB质量差的代码。在刚刚阅读完流结束之后,尝试进行解包或其他任何事情都没有多大意义。