如何故意生成ConnectException?

Joe*_*Joe 0 java

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

来自Java Docs ConnectException,

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

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

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

Tec*_*ton 5

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

  1. 域本身的DNS条目不存在.想想www.argh-nonexistant.com与www.google.com
  2. 域存在,并且Web服务器正在侦听,但路径不存在.(http://www.google.de/please-give-my-an-error/)

在这两种情况下,ConnectException都不会抛出,因为此异常需要这样做

  1. 域的DNS条目有效,名称解析成功,并且
  2. 没有websever在给定端口上运行.

ConnectException和插座基本上驻留在层3或ISO/OSI堆栈的第4(即,TCP/IP),而你的错误的URL是一个应用层问题.

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 因为操作系统打开的套接字终止; 连接消失了. (2认同)