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库?
我相信你可以使用你当前创建的方法,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();
Run Code Online (Sandbox Code Playgroud)
所以一切照旧。
详细说明@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)
归档时间: |
|
查看次数: |
11029 次 |
最近记录: |