Я пытаюсь использовать SSLengine с SocketChannels в неблокирующем режиме.SSLEngine не расшифровывает все данные
Рукопожатие сделано правильно, но когда я пытаюсь читать & расшифровывать HTTP сообщение от channelsocket, только заголовки расшифрованы и 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 Cache-Control: нет кэша Content-Length: 20 Content-Type: применение/октет-поток Ведущий: 192.168.xx
?> .//?> .//?> .//?> .//?> .//?> .//?> .//?> .//?> .//?> .//?>.// < --- шифрованные символы здесь
но когда я напечатать расшифрованные данные в peerAppData я получаю
POST тест HTTP/1.1/ Cache-Control: нет кэша Content-Length: 20 Content-Type: application/octet-stream Host: 192.168.XX // а затем три пустые строки здесь.
это проблема дешифрования с помощью SSlengine ??
Благодаря
Также я хотел бы добавить, что метод разворачивать возвращает статус OK.
'while (num == 0)'? Извините, но что случилось со всеми остальными номерами? –
while (num == 0) guarrante me, что цикл будет выходить, если и только если сокет получил что-то. (в моем случае сокет может читать все вместе, так как сообщение мало) – user3791570
Да, но есть ли гарантия, что он будет читать * все * данные? –