SSL套接字连接超时

时间:2011-04-19 11:37:34

标签: java sockets ssl timeout connection

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

对于普通套接字,我可以使用new Socket()创建没有任何目标端点的新套接字实例,然后调用connect(SocketAddress endpoint, int timeout)方法。使用SSL套接字时,我无法创建new SSLSocket()SSLSocketFactory.getDefault().createSocket()方法,但没有端点抛出UnsupportedOperationException 未连接的套接字未实现消息。

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

3 个答案:

答案 0 :(得分:6)

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

  

返回一个分层的套接字   连接到命名的现有套接字   主机,在给定的端口。

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

答案 1 :(得分:3)

使用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();

所以它照常营业。

答案 2 :(得分:0)

详细说明@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);`