如何确认Java中的SSL套接字已完成握手?

时间:2018-12-12 17:35:03

标签: java sockets ssl java-8

这是一些伪代码

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套接字的抽象和包装器。从this帖子开始,我必须假设服务器尚未完成握手,但是Client已完成?为什么sent会返回true?我无法确认Server实际上已经收到了该消息,因为该异常会立即引发。我只有Client sent布尔值可依靠。

所以我的问题是如何确认握手已完成?

感谢您的帮助,对于任何歧义,我们深表歉意!我可以清除任何混乱!

1 个答案:

答案 0 :(得分:1)

@Mark提出了关于sendMessage()方法的要点。我进行了更多研究,发送消息后,它不返回true,而是将消息放置在输出队列中时返回。因此,事实证明消息可能从未真正发送过。文档不正确。

因此,握手从未真正完成,sent是一个谎言,因为连接从未完全打开。

谢谢@Mark!