что было сделано, когда URL.openconnection ()?

Я хочу знать, что было сделано, когда 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 (& quot; http: //www.google.com"), все в порядке.
когда я запускаю testConnection (& quot; http: //219.09.34.23.1"), & quot; 219.09.34.23.1 & quot; это случайный 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.<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

это означает, что он потратил 5 мсек на запуск openconnection и потратил 43 мсек, чтобы обнаружить, что это неизвестный хост, моя проблема в том, что было сделано, когда URL.openconnection () как & quot; 219.09.34.23.1 & quot; неизвестный хост? Спасибо за любую помощь!

Ответы на вопрос(2)

Open connection is not like connect

openconnection не позволяет вам загружать контент URL, который наверняка. Вы должны позвонить, подключиться. но не совсем :) следующее объяснит:

От вас не всегда требуется явно вызывать метод connect, чтобы инициировать соединение. Операции, которые зависят от соединения, такие как getInputStream, getOutputStream и т. Д., При необходимости будут неявно выполнять соединение.

Решение Вопроса

Если вы читаетеJavadocs для URL.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.

It should be noted that a URLConnection instance does not establish the actual network connection on creation. This will happen only when calling URLConnection.connect().

Update

IP-адрес, который вы использовали в своем & quot; случайном ip & quot; не является действительным; он должен состоять из 4 октетов, а не 5. Вероятно, 43 мсек используются для: (1) поиска DNS в IP-адресах, отличных от IP (2), печати трассировки стека.

Ваш ответ на вопрос