【问题标题】:Create SSLSocket by SSLSocketFactory with set connection timeout通过 SSLSocketFactory 创建 SSLSocket 并设置连接超时
【发布时间】:2011-08-31 08:25:13
【问题描述】:

我的代码在这里:

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, getAllCerts(), new SecureRandom());
SSLSocketFactory factory = sslContext.getSocketFactory();
mSocket = (SSLSocket) factory.createSocket("myhost.com", socketPort[index]);

我必须检查端口表并选择打开的端口。一切正常,但在 createSocket() 上,我的应用程序浪费了很多时间。如果我有 5 个端口并且最后一个端口是开放的,则连接大约需要 3 分钟。

如何在 SSLSocketFactory 上设置超时以加快连接速度?

【问题讨论】:

  • 我不太确定您希望如何通过设置超时来加快连接过程。你的代码在哪里运行?在异步任务中?在服务中?任何初始数据传输?你考虑过 SSLSessionCache 吗?
  • 您找到解决方案了吗?我面临同样的问题,如果您能发布您的解决方案,那就太好了......提前致谢

标签: java android sockets timeout


【解决方案1】:

如果你还有疑惑,可以使用https://groups.google.com/forum/#!topic/android-developers/EYtMO5WoXXI中给出的思路

import javax.net.ssl.SSLSocketFactory;

// Create a socket without connecting
SSLSocketFactory socketFactory = SSLSocketFactory.getDefault();
Socket socket = socketFactory.createSocket();

// Connect, with an explicit timeout value
socket.connect(new InetSocketAddress(endpoint.mServer,
endpoint.mPort), CONNECT_TIMEOUT);

【讨论】:

  • 这对我有用!没有考虑在没有连接的情况下创建套接字的可能性。
  • 不适用于 SSL,因为 java.net.SocketException: Unconnected sockets not implemented
【解决方案2】:

尝试包装现有的套接字:

Socket socketConn = new Socket();
socketConn.connect(addr, DEFAULT_CONNECT_TIMEOUT);
mSocket = socketConn.getSocketFactory().createSocket(socketConn, hostname, port, true);

【讨论】:

  • 你测试过这个吗?我希望最后一行中的 createSocket() 方法首先关闭套接字,因为它已经处于连接(非 SSL)状态。此外,根据文档,具有指定 SSL 握手超时的 SSL 套接字工厂在 SSL 协议完成建立连接后将底层的套接字超时重置为 0(也就是无超时)。
  • @ClassStacker 你错了。我已经做到了。有用。 (1) 这就是您实现 SMTP、LSAP 等的 STARTTLS 命令的方式,因此您会在 JavaMail、JNDI LDAP 提供程序等内部找到相同的东西。 (2) 这是连接超时,而不是读取超时,这是你最后一句话的内容。 (3) 请引用该声明的参考。 SSLSocketFactory SSLSocket的Javadoc中没有出现“超时”这个词,除了在后一种情况下作为对从Socket继承的方法的引用。
  • 在我的情况下不起作用,因为我需要确保套接字绑定到某个网络。使用new Socket(),套接字仍将绑定到默认网络。
  • @winklerrr 这不正确。新套接字在您连接之前根本不会绑定,然后它会绑定到正确的网络以进行连接,这取决于到目标的 IP 路由。
  • @EJP 您对“通过 IP 路由选择正确的网络”说 - 但这在我的情况下不起作用。怎么联系你?
猜你喜欢
  • 2018-09-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2017-06-24
相关资源
最近更新 更多