如题:
               private HttpURLConnection conn=null;
               ... ...
               try{
URL u = new URL(requestURL);
conn = (HttpURLConnection)u.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Charset","UTF-8");
conn.setRequestProperty("Content-type","text/xml");
conn.setRequestMethod("POST");
conn.setConnectTimeout(CONNECT_TIMEOUT);
conn.setReadTimeout(READ_TIMEOUT);
conn.connect();
... ...
}catch(MalformedURLException e){

return false;
}catch(IOException e){
//此处怎么判断是调用connect方法超时后抛出的IO异常??
return false;
}catch(ZSException e){

return false;
}catch(Exception e){

return false;
}
finally{
if(conn!=null) conn.disconnect();
}

解决方案 »

  1.   

    IOException 内通常都是IO引起的,不需要判断。
      

  2.   

    SocketTimeoutException - 如果在建立连接之前超时期满 
    捕捉这个
      

  3.   

    观察了下面这个 stack trace 就该知道了吧。
    [code=Java]
    java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:352)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:214)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:201)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377)
    at java.net.Socket.connect(Socket.java:530)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:170)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:406)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:541)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:245)
    at sun.net.www.http.HttpClient.New(HttpClient.java:318)
    at sun.net.www.http.HttpClient.New(HttpClient.java:335)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:832)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:773)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:698)
    at Socket.main(Socket.java:34)</code>