SSL套接字连接超时

13

如何在Java中为SSL Sockets配置连接超时时间?

对于普通的sockets,我可以使用new Socket()创建一个无目标端点的新socket实例,然后调用connect(SocketAddress endpoint, int timeout)方法设置连接超时时间。但是对于SSL sockets,我不能使用new SSLSocket()SSLSocketFactory.getDefault().createSocket()方法创建没有端点的socket,否则会抛出UnsupportedOperationException的异常信息为Unconnected sockets not implemented

是否有一种使用标准java库,在Java中为SSL Sockets使用连接超时的方法?

3个回答

9
我认为您可以使用当前的方法创建套接字,然后连接它。要在连接上建立SSL,您可以使用SSLSocketFactory.createSocket。这样您就可以完全控制连接,然后协商在其上设置SSL。如果我误解了您的问题,请告诉我。

啊,那看起来像是一个选项。我会尝试一下。谢谢。 - Peter Štibraný

8

在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();

所以这是常规业务。

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);`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接