我正在尝试在非阻塞模式下使用带有SocketChannels的SSLengine。SSLEngine不解密所有的数据
握手做得正确,但是当我尝试读取channelsocket &解密HTTP的帖子,只有标题被解密和身体disapear:
<code>
int num=0;
while(num==0){
num=socketChannel.read(peerNetData);
if(num==-1)
break;
}
if (num == -1) {
System.out.println("channel closed");
} else if (num == 0) {
System.out.println("no bytes to read");
} else {
// Process incoming data
peerNetData.flip();
SSLEngineResult res = engine.unwrap(peerNetData, peerAppData);
//return a ok status
peerNetData.flip();
peerAppData.flip();
System.out.println(new String(peerNetData.array()));
System.out.println(new String(peerAppData.array()));
</code>
印刷在peerNetData我收到加密数据时
:
> .// POST测试HTTP/1.1 缓存控制:无缓存 的Content-Length:20 内容类型:应用/八位字节流 主机:192.168.XX
????????????????????????????????????这里.//?>.// < ---加密字符
但是当我打印peerAppData解密数据我得到
POST测试HTTP/1.1/ 缓存控制:无缓存 Content-Length:20 Content-Type:application/octet-stream Host:192.168.XX //然后在这里有三个空行。
这是SSlengine的解密问题吗?
谢谢
另外我想补充说,解包方法返回一个OK状态。
'while(num == 0)'?对不起,但所有其他数字有什么不对? – 2014-10-07 00:20:35
while(num == 0)保证我,当退出循环,当且仅当套接字已收到某些东西。 (在我的情况下,套接字能够一起读取,因为信息很小) – user3791570 2014-10-07 13:28:31
是的,但有没有保证它会读取*全部*数据?在一般情况下,我们必须处理下溢情况下的 – 2014-10-07 13:58:23