Java 为什么这段代码有时抛出UnknownHostException,但有时抛出SocketTimeoutException

Java 为什么这段代码有时抛出UnknownHostException,但有时抛出SocketTimeoutException,java,sockets,Java,Sockets,Linux操作系统,Tomcat服务器,“xxx.xxxx.com”是不正确的URL 我一直在期待一个未知的后验,但有时我得到的是未知的后验。 UnknownHostException错误消息 java.net.UnknownHostException:xxx.xxxx.com位于 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178) 位于java.net.socksocketimpl.connect

Linux操作系统,Tomcat服务器,“xxx.xxxx.com”是不正确的URL

我一直在期待一个未知的后验,但有时我得到的是未知的后验。

UnknownHostException错误消息

java.net.UnknownHostException:xxx.xxxx.com位于 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178) 位于java.net.socksocketimpl.connect(socksocketimpl.java:392) java.net.Socket.connect(Socket.java:579)位于 sun.net.NetworkClient.doConnect(NetworkClient.java:178)位于 net.www.http.HttpClient.openServer(HttpClient.java:432)

SocketTimeoutException错误消息

java.net.SocketTimeoutException:连接在时超时 java.net.PlainSocketImpl.socketConnect(本机方法)位于 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 位于java.net.socksocketimpl.connect(socksocketimpl.java:392) java.net.Socket.connect(Socket.java:579)位于 sun.net.NetworkClient.doConnect(NetworkClient.java:178)位于 net.www.http.HttpClient.openServer(HttpClient.java:432)


只是一个猜测-有时你的应用程序可能无法连接到DNS服务器吗?这就解释了为什么你会收到SocketTimeoutException而不是UnknownHostException——你的应用程序正在尝试查找主机名,但在确定主机不存在之前超时

    URL realUrl = new URL("xxx.xxxx.com");
    URLConnection conn = realUrl.openConnection();
    conn.setRequestProperty("accept", "*/*");
    conn.setRequestProperty("connection", "Keep-Alive");
    conn.setRequestProperty("user-agent",
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    conn.setDoOutput(true);
    conn.setDoInput(true);
    out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream()));
    out.print(param);
    out.flush();
    in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    int len = 0;
    InputStream is = conn.getInputStream();
    while ((len = is.read(buf)) != -1) {
        System.out.println(len);
        baos.write(buf, 0, len);
    }