SSL套接字连接超时

Pet*_*aný 7 java sockets connection ssl timeout

如何在Java中为SSL套接字配置连接超时?

对于普通套接字,我可以简单地创建没有任何目标端点的新套接字实例new Socket(),然后调用connect(SocketAddress endpoint,int timeout)方法.使用SSL套接字,我不能创建new SSLSocket()SSLSocketFactory.getDefault().createSocket()方法,没有终点抛出UnsupportedOperationException未连接的插座不落实的消息.

有没有办法在Java中使用SSL套接字的连接超时,仅使用标准的Java库?

cni*_*tar 6

我相信你可以使用你当前创建的方法,Socket然后连接它.建立SSL您可以使用的连接SSLSocketFactory.createSocket

返回在给定端口上连接到指定主机的现有套接字上分层的套接字.

通过这种方式,您可以完全控制连接,然后您可以在其上设置SSL.如果我误解你的问题,请告诉我.


pre*_*edi 5

使用 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();
Run Code Online (Sandbox Code Playgroud)

所以一切照旧。


Gib*_* Nu 5

详细说明@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);`
Run Code Online (Sandbox Code Playgroud)