gpt4 book ai didi

java - 如何故意产生ConnectException?

转载 作者:行者123 更新时间:2023-12-01 17:00:44 24 4
gpt4 key购买 nike

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

来自 ConnectException 的 Java 文档,

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

Signals that an error occurred while attempting to connect a socket to a remote address and port. Typically, the connection was refused remotely (e.g., no process is listening on the remote address/port).

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

最佳答案

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

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

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

  1. 域的 DNS 条目有效并且名称解析成功,并且
  2. 给定端口上没有运行任何网络服务器。

ConnectException 和套接字基本上驻留在 ISO/OSI 堆栈的第 3 层或第 4 层(即 TCP/IP),而格式错误的 URL 是应用程序层问题。

您的解决方案:查找具有有效 DNS 条目但没有监听网络服务器的服务器。 ::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();
}
}

关于java - 如何故意产生ConnectException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com