有没有办法让SSLSocket在不使用addHandshakeListener()方法的情况下等待握手完成?我希望它被阻塞,直到它完成握手。
Edit:更多说明:最初使用的是常规(非SSL)套接字(这是必需的,因为在实际握手之前必须将包发送到服务器)。此套接字使用SSlSocketFactory.createSocket“转换”为SSLSocket。我的问题是,现在是否有一种同步握手的方法。
发布于 2012-10-31 05:48:29
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中没有完整的文档,请参阅原始Java API以获取完整的javadoc:
在此连接上启动SSL握手。常见原因包括需要使用新的加密密钥、更改密码套件或启动新会话。要强制完全重新验证,可以在开始此握手之前使当前会话无效。
如果数据已经在连接上发送,它将在此握手期间继续流动。当握手完成时,这将用一个事件来通知。此方法与连接上的初始握手同步,并在协商的握手完成时返回。某些协议可能不支持现有套接字上的多次握手,并可能引发IOException。
如果你在对等体之间多次握手,情况会变得相当复杂,在某些情况下(当你需要侦听器时),这可能是一个异步调用,请查看这个在线文档Fundamental Networking in Java以了解更多详细信息。
https://stackoverflow.com/questions/12956449
复制相似问题