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