【发布时间】:2013-08-16 02:44:33
【问题描述】:
在我的代码中,根据一个布尔标志,我应该决定是否与 SSL 套接字握手。我使用 SSLSocketFactory 创建套接字,这是从官方 Javadoc 中获取的 createSocket 方法的签名。
abstract Socket createSocket(Socket s, String host, int port, boolean autoClose)
在这里返回Socket 而不是SSLSocket 似乎是一个明确的设计选择,这意味着使用此方法的类不需要知道Socket 是SSLSocket。
但是,如果我必须握手,我必须向下转换它,因为方法
public abstract void startHandshake() throws java.io.IOException;
在 SSLSocket 类上定义。
SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket( getApiServerAddress(), getPort() );
三个可能的答案中哪个是正确的?
库中的这种设计模式表明您不应该直接调用 startHandShake(),而是调用 Socket 类上的某个方法,该方法将调用 startHandShake()。 Socket 类的这个方法是什么?而且,如果是这样,为什么 startHandShake() 是公开的?
库设计不佳。
我没有以正确的方式创建 SSLSocket。
【问题讨论】: