如何故意生成ConnectException?

时间:2015-01-04 16:26:34

标签: java

我使用java HttpURLConnection类连接到url,我想生成ConnectException来监视和记录一些数据。我只是想连接随机网站但我无法生成ConnectionException,即使我试图访问不存在的网址但它正在捕捉MalformedURLException

来自ConnectException的Java文档,

http://docs.oracle.com/javase/7/docs/api/java/net/ConnectException.html#ConnectException()

  

表示尝试连接套接字时发生错误   远程地址和端口。通常,连接被拒绝   远程(例如,没有进程正在侦听远程地址/端口)。

这意味着需要从远程服务器拒绝连接,但我不知道这是什么意思以及如何从我的java代码生成它?

1 个答案:

答案 0 :(得分:5)

当您尝试连接到不存在的URL时,可能会发生两种错误:

  1. 域本身的DNS条目不存在。想想www.argh-nonexistant.com与www.google.com
  2. 域存在,并且Web服务器正在侦听,但路径不存在。 (http://www.google.de/please-give-my-an-error/
  3. 在这两种情况下,都不会抛出ConnectException,因为此异常需要

    1. 域的DNS条目有效且名称解析成功,
    2. 在给定端口上没有运行任何websever。
    3. ConnectException和套接字基本上位于ISO / OSI堆栈的第3层或第4层(即TCP / IP),而您的格式错误的URL是应用层问题。

      您的解决方案:查找具有有效DNS条目但没有侦听网络服务器的服务器。除非您自己在端口80上托管网络服务器,否则::1应该是一个安全的选择。这是一个最小的工作示例:

      package Foo;
      
      import java.io.IOException;
      import java.net.HttpURLConnection;
      import java.net.URL;
      
      public class TestClass {
          public static void main(String[] args) throws IOException {
              URL url = new URL("http://localhost");
              HttpURLConnection c = (HttpURLConnection)url.openConnection();
              c.connect();
          }
      }