我的代码假设向某个对等体发起一个SSL套接字,提取证书并关闭套接字。
问题是,createSocket()似乎阻塞了很长一段时间。如何设置合理的超时时间?
下面是我的完整代码:
public static void main(String[] args) throws Exception {
SSLContext sslCtx;
sslCtx = SSLContext.getInstance("TLSv1.2");
sslCtx.init(null, new TrustManager[]{new X509TrustManager() {
private X509Certificate[] accepted;
@Override
public void checkClientTrusted(X509Certificate[] xcs, String string) {
}
@Override
public void checkServerTrusted(X509Certificate[] xcs, String string) {
accepted = xcs;
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return accepted;
}
}}, null);
System.out.println("start ....");
try (SSLSocket sslSocket = (SSLSocket) sslCtx.getSocketFactory().createSocket("156.70.54.68", 443)) {
sslSocket.setSoTimeout(5_000);
Certificate[] certificates = sslSocket.getSession().getPeerCertificates();
System.out.println(certificates.length);
} catch (Exception e) {
System.out.println(e);
}
}发布于 2019-10-02 23:41:00
不是调用socket(String,int),而是调用socket(),然后调用socket(),然后定义超时,并调用connect(InetSocketAddress,int),它将int作为超时参数。
try (SSLSocket sslSocket = (SSLSocket) sslCtx.getSocketFactory().createSocket()) {
sslSocket.setSoTimeout(5_000);
Certificate[] certificates = sslSocket.getSession().getPeerCertificates();
System.out.println(certificates.length);
sslSocket.connect(new InetSocketAddress("156.70.54.68", 443), 5_000);
} catch (Exception e) {
System.out.println(e);
}https://stackoverflow.com/questions/58204553
复制相似问题