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