这是一些伪代码
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
布尔值可依靠。
所以我的问题是如何确认握手已完成?
感谢您的帮助,对于任何歧义,我们深表歉意!我可以清除任何混乱!
答案 0 :(得分:1)
@Mark提出了关于sendMessage()
方法的要点。我进行了更多研究,发送消息后,它不返回true
,而是将消息放置在输出队列中时返回。因此,事实证明消息可能从未真正发送过。文档不正确。
因此,握手从未真正完成,sent
是一个谎言,因为连接从未完全打开。
谢谢@Mark!