我想知道在URL.openconnection()时做了什么.
我做了一些像这样的测试:
public static void main(String[] args) {
// testConnection("http://www.google.com");
testConnection("http://219.09.34.23.1");
}
private static void testConnection(final String _url) {
new Thread(new Runnable() {
String strurl = _url;
long starttime = 0;
long endtime = 0;
public void run() {
try {
System.out.println("open:" + strurl);
starttime = System.currentTimeMillis();
System.out.println("starttime:" + starttime);
URL url = new URL(strurl);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
endtime = System.currentTimeMillis();
System.out.println("openConnection endtime:" + endtime);
System.out
.println("spend:" + (endtime - starttime) + " ms");
conn.connect();
endtime = System.currentTimeMillis();
System.out.println("connect endtime2:" + endtime);
System.out
.println("spend:" + (endtime - starttime) + " ms");
conn.getResponseCode();
endtime = System.currentTimeMillis();
System.out.println("endtime3:" + endtime);
System.out
.println("spend:" + (endtime - starttime) + " ms");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
endtime = System.currentTimeMillis();
System.out.println("MalformedURLException endtime:"
+ endtime);
System.out
.println("spend:" + (endtime - starttime) + " ms");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
endtime = System.currentTimeMillis();
System.out.println(" IOException endtime:" + endtime);
System.out
.println("spend:" + (endtime - starttime) + " ms");
}
}
}).start();
}
当我运行testConnection(“http://www.google.com”)时,一切正常.
当我运行testConnection(“http://219.09.34.23.1”)时,“219.09.34.23.1”是一个随机的ip可能不存在我写的,它打印出来:
open:http://219.09.34.23.1
starttime:1338978920350
openconnection endtime:1338978920355
spend:5 ms
java.net.UnknownHostException: 219.09.34.23.1
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at Main$1.run(Main.java:37)
at java.lang.Thread.run(Unknown Source)
IOException endtime:1338978920393
spend:43 ms
这意味着花了5ms来运行openconnection,并花了43ms来发现它是一个未知主机,我的问题是,当URL.openconnection()为“219.09.34.23.1”是未知主机时已经完成了什么?
谢谢你的帮助!



