2015-02-24 42 views
-1

我正在使用“URLConnection”在java中执行get请求。我将获取请求发送到不同的IP地址,以便生成警报。如果url有效,它会建立连接并从url中读取数据返回,但如果连接不成功,它不会返回任何内容。我需要知道urlconnection中是否有任何isconnect方法,因为我需要为我的程序设置一个标志,并且我找不到任何方式来确定不成功的连接,所以我使用以下代码: URL url = new URL(address );如何在java中检查url连接状态

  URLConnection conn = url.openConnection(); 
     conn.setConnectTimeout(20); 
     //bool flag=conn.isconnect() 


     BufferedReader br = new BufferedReader(new 
     InputStreamReader(conn.getInputStream()));    
     System.out.println("connected"); 

     while ((line = br.readLine()) != null) 
     { 
     result += line; 

     } 
     //if (flag){triggered the ip} 
     //if (!flag){not triggered} 

我需要执行,如果条件,但我上挣扎,因为程序犯规了“的BufferedReader BR”语句后到达如果IP无效,或者如果它不存在的评论。

+1

使用try/catch来捕获相关的异常。 – bmargulies 2015-02-24 16:54:40

回答

-1

url.openConnection,当无法建立连接时,conn.getInputStream将抛出异常。

唯一的问题是如果你的服务器会接受连接但不会发送enything(导致挂起,服务器端的代码有bug)。 因此,您必须调用setConnectTimeout以在发生异常时获取异常。

你已经设置了超时时间。异常处理应该完成这项工作。

try{ 
URLConnection conn = url.openConnection(); 
conn.setConnectTimeout(20); 
conn.setReadTimeout(...) 

BufferedReader br = new BufferedReader(new 
InputStreamReader(conn.getInputStream()));    
System.out.println("connected"); 

while ((line = br.readLine()) != null) 
{ 
result += line; 
} 
} catch (IOException e) { 
    ... deal with wrong address, timeout and etc 
} 
+0

Yeap想通了,非常感谢你 – 2015-02-24 17:04:56

+1

连接超时不会解决服务器不发送任何东西的问题。你需要阅读超时。而20ms对于两者来说都太短了。 – EJP 2015-02-24 17:37:34

+0

@EJP当然你是对的,更新 – Zielu 2015-02-24 17:54:00