【问题标题】:how to check url connection status in java如何在java中检查url连接状态
【发布时间】:2015-04-26 10:06:17
【问题描述】:

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

我需要执行注释的 if 条件,但我正在努力解决它,因为如果 ip 无效或不存在,程序不会在“bufferedReader br”语句之后到达。

【问题讨论】:

  • 使用 try/catch 捕获相关异常。

标签: java httpurlconnection


【解决方案1】:

url.openConnection、conn.getInputStream在无法建立连接时会抛出异常。

唯一的问题是您的服务器是否会接受连接但不会发送任何内容(因为它挂起,服务器端的代码有错误)。 因此,您必须调用 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
}

【讨论】:

  • 连接超时并不能解决服务器不发送任何内容的问题。你需要一个读取超时。而且 20 毫秒对任何一方来说都太短了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 2013-12-22
  • 2015-09-21
  • 1970-01-01
  • 2012-06-06
  • 2021-09-02
  • 2013-08-17
相关资源
最近更新 更多