I want to know what has been done when URL.openconnection().
i have done some test like this:
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();
}
when i run testConnection("http://www.google.com"), all things are ok.
when i run testConnection("http://219.09.34.23.1"), "219.09.34.23.1" is a random ip maybe not exist i wrote, it print this:
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.<init>(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
it means it spent 5ms to run openconnection, and spent 43ms to find it is a unknownhost, my problem is, what has been done when URL.openconnection() as "219.09.34.23.1" is unknownhost? Thanks for any help!
openConnection. Returns a URLConnection instance that represents a connection to the remote object referred to by the URL . A new instance of URLConnection is created every time when invoking the URLStreamHandler. openConnection(URL) method of the protocol handler for this URL.
connect method is called. When you do this you are initializing a communication link between your Java program and the URL over the network. For example, the following code opens a connection to the site example.com : try { URL myURL = new URL("http://example.com/"); URLConnection myURLConnection = myURL.
getOutputStream()); If the URL does not support output, getOutputStream method throws an UnknownServiceException . If the URL does support output, then this method returns an output stream that is connected to the input stream of the URL on the server side — the client's output is the server's input.
If you read the javadocs for URL.openConnection()
, you'll find:
Returns a
URLConnection
instance that represents a connection to the remote object referred to by the URL.A new instance of
URLConnection
is created every time when invoking theURLStreamHandler.openConnection(URL)
method of the protocol handler for this URL.It should be noted that a
URLConnection
instance does not establish the actual network connection on creation. This will happen only when callingURLConnection.connect()
.
Update
The IP you used in your "random ip" is not valid; it should consist of 4 octets, not 5. The 43ms is probably for: (1) doing a DNS lookup on the non-IP ip (2) printing the stack trace.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With