【问题标题】:Why doses this code sometimes throw UnknownHostException but other times throw SocketTimeoutException [duplicate]为什么此代码有时会抛出 UnknownHostException 但有时会抛出 SocketTimeoutException [重复]
【发布时间】:2016-03-09 01:56:29
【问题描述】:
    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);
    }

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

我一直在期待 UnknownHostException,但有时我得到的是 UnknownHostException。

UnknownHostException 错误信息

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

SocketTimeoutException 错误信息

java.net.SocketTimeoutException: 连接超时 java.net.PlainSocketImpl.socketConnect(Native Method) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在 java.net.Socket.connect(Socket.java:579) 在 sun.net.NetworkClient.doConnect(NetworkClient.java:178) 在 sun.net.www.http.HttpClient.openServer(HttpClient.java:432)

【问题讨论】:

    标签: java sockets


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2013-05-27
      • 2016-02-15
      相关资源
      最近更新 更多