[英]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.