有没有办法让SSLSocket等到握手完成而不使用addHandshakeListener()方法?我想阻止它完成握手。
编辑: 稍微澄清一下:最初使用常规(非SSL)套接字(这是必需的,因为必须在实际握手发生之前将包发送到服务器)。使用SSlSocketFactory.createSocket将此套接字“转换”为SSLSocket。 我的问题是,现在是否有办法同步进行握手。
答案 0 :(得分:5)
SSLSocket.startHandshake()是第一次在对等体之间启动握手时的同步调用,它将阻塞调用线程直到握手完成:
... ...
// initial handshake between peers, don't need Listener:
sslSocket.startHandshake(); // <- this will block the calling thread.
// handshake is completed at this point
... ...
Android API中没有完整记录,有关完整的javadoc,请参阅原始Java API:
在此连接上启动SSL握手。常见原因包括需要使用新的加密密钥,更改密码套件或启动新会话。要强制完成重新认证,在开始此握手之前,当前会话可能会失效。
如果已在连接上发送数据,则在此握手期间会继续流动。握手完成后,将通过事件发出信号。 此方法对于连接上的初始握手是同步的,并在协商的握手完成时返回。某些协议可能不支持现有套接字上的多次握手,并且可能抛出IOException。
如果你在对等体之间多次操作握手,情况就会变得非常复杂,在某些情况下可能是异步调用(当你需要Listener时),请查看这个在线文档Fundamental Networking in Java以获取更多详细信息。