我的代碼假設(shè)與某個對等方啟動 SSL 套接字,提取證書并關(guān)閉套接字。問題是,createSocket()似乎阻塞了很長時間。如何設(shè)置合理的超時時間?這是我的完整代碼: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); } }
1 回答

慕神8447489
TA貢獻1780條經(jīng)驗 獲得超1個贊
不要先調(diào)用socket(String, int),然后調(diào)用socket(),然后定義超時,然后調(diào)用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);
}
添加回答
舉報
0/150
提交
取消