Как я могу подтвердить, что рукопожатие было завершено с SSL-сокетами в Java? - PullRequest
0 голосов
/ 12 декабря 2018

Вот какой-то псевдокод

Client:
    boolean sent = false;
    byte[] message = new String("test").getBytes();

    send()
    {
        sent = sslSocket.sendMessage(message);

        if (sent)
            sslSocket.close();
    }

Я пишу тесты, которые должны быть довольно быстрыми.Как только Client успешно отправит сообщение, оно должно немедленно закрыться.В моих тестах Client возвращает sent == true, поэтому сокет закрывается.Однако Server вызывает исключение received close_notify during handshake.Это исключение не происходит, когда я использую Thread.sleep(200) прямо перед закрытием Client.

Наши сокеты являются нашими собственными абстракциями и обертками для сокетов Java.Из этого сообщения я должен предположить, что Сервер не завершил рукопожатие, но Client имеет?Зачем еще sent вернуть true?Однако я не могу подтвердить, что сообщение действительно было получено Server, потому что исключение выдается немедленно.У меня есть только Client sent логическое значение, на которое можно положиться.

Итак, мой вопрос Как я могу подтвердить, что рукопожатие завершено?

Спасибо за помощьи извините за любую двусмысленность!Я могу устранить любые путаницы!

1 Ответ

0 голосов
/ 12 декабря 2018

@ Марк хорошо поднял вопрос о методе sendMessage().Я посмотрел на него больше, и он не возвращает true, когда сообщение было отправлено, но возвращается, когда сообщение было помещено в очередь вывода.Получается, что сообщение, вероятно, никогда не было отправленоДокументация была неверной.

Таким образом, рукопожатие фактически никогда не было завершено, и sent было ложью, потому что соединение никогда не было полностью открыто.

Спасибо @Mark!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...