簡體   English   中英

SSL套接字連接超時

[英]SSL Socket connect timeout

如何在Java中為SSL套接字配置連接超時?

對於普通套接字,我可以使用new Socket()簡單地創建沒有任何目標端點的新套接字實例,然后調用connect(SocketAddress endpoint,int timeout)方法。 使用SSL套接字,我無法創建new SSLSocket()SSLSocketFactory.getDefault().createSocket()方法,沒有端點拋出UnsupportedOperationException未連接的套接字未實現消息。

有沒有辦法在Java中使用SSL套接字的連接超時,僅使用標准的Java庫?

我相信您可以使用當前的方法創建Socket然后連接它。 要通過連接建立SSL ,可以使用SSLSocketFactory.createSocket

返回在給定端口上連接到指定主機的現有套接字上分層的套接字。

通過這種方式,您可以完全控制連接, 然后您可以在其上設置SSL。 如果我誤解你的問題,請告訴我。

使用java 1.7,以下內容不會拋出問題中所述的異常:

String host = "example.com";
int port = 12345;
int connectTimeout = 5000;
SSLSocket socket = (SSLSocket)SSLSocketFactory.getDefault().createSocket();
socket.connect(new InetSocketAddress(host, port), connectTimeout);
socket.startHandshake();

所以它照常營業。

在詳細解釋@ predi的答案時,我發現我也需要使用“setSoTimeout”。 否則有時它會在握手中陷入困境(在非常不穩定的連接上):

    final int connectTimeout = 30 * 1000;
    SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket();
    socket.setSoTimeout(connectTimeout);
    socket.connect(new InetSocketAddress(hostAddress, port), connectTimeout);
    socket.startHandshake();
    socket.setSoTimeout(0);`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM