在Windows 10 x64计算机上将Java版本从Java 1.8u161升级到1.8u191之后,我遇到了几个问题。 经过一些调试后,我想出了以下代码片段来演示它。 如果运行更新161,一切正常。尝试获取InputStream时,使用更新191运行相同的代码部分会导致连接超时。 我尝试使用更新161安装的证书,该证书也没有帮助。 在访问InputStream之前运行启用了网络调试(-Djavax.net.debug = all)的应用程序并没有太大的区别(当然某些证书和密码是不同的)。 似乎未在更新191下执行SSL握手(更新161有相应的调试输出)。 有人可以确认这一点或告诉我我在做什么错吗?
package example;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.io.InputStream;
public class ConnectionTimeout {
public static void main(String[] args) throws Exception {
System.err.println("java.version=" + System.getProperty("java.version"));
HttpURLConnection.setFollowRedirects(false);
URL url = new URL("https://heise.de");
URLConnection connection = url.openConnection();
System.err.println("connectiontype: " + connection.getClass().getName());
// timeout on 1.8-191; not on 1.8-161
InputStream instream = connection.getInputStream();
System.err.println("instream:" + instream.getClass().getName());
instream.close();
}
}
根据要求,这是一个堆栈跟踪:
Exception in thread "main" java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)
at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
at example.ConnectionTimeout.main(ConnectionTimeout.java:24)