线程" main"中的例外情况java.net.ConnectException:拒绝连接:运行Oracle教程示例时连接

时间:2014-10-01 21:07:10

标签: java http

我从Oracle Docs复制了示例程序,我正在运行它#34;按原样#34;在Eclipse中。

然而,每次运行它我都得到ConnectionException。我还需要配置其他什么吗?另外,我对这个问题的理解很弱,请你推荐关于Java Web编程的初学者指南。

代码是

public class Test {
    public static void main(String[] args) throws Exception {
        URL oracle = new URL("http://www.oracle.com/");
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                                    yc.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) 
            System.out.println(inputLine);
        in.close();
    }
}

我得到的例外是

Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at Test.main(Test.java:9)

我可以通过Chrome访问http://www.oracle.com,我可以访问互联网。如果是防火墙问题,有人可以告诉我如何解决这个防火墙问题?

1 个答案:

答案 0 :(得分:4)

我已经使用了你的代码,并在我的eclipse环境中本地运行它。它工作并产生如下输出:

<!DOCTYPE html>

<html  lang="en-US" class="no-js">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="text/javascript">
   var _U = "undefined";
   var g_HttpRelativeWebRoot = "/ocom/";
   var SSContributor = false;
   var SSForceContributor = false;
   var SSHideContributorUI = false;
   var ssUrlPrefix = "/us/";
   var ssUrlType = "2";

   var g_navNode_Path = new Array();
       g_navNode_Path[0] = '8';
   var g_ssSourceNodeId = "8";
   var g_ssSourceSiteId = "ocomen";
</script>
.....

这留下了一个问题,因为失败不是您的程序的一部分,而是您环境的一部分。

当我输入此答案时,您添加了代理设置。

您应该将-Djava.net.useSystemProxies=true添加到应用程序的运行框中,或者添加:

System.setProperty("java.net.useSystemProxies", "true");

在主方法的第一行。这是documented here

  

java.net.useSystemProxies (默认值:false)

     

在最近的Windows系统和Gnome 2.x系统上,有可能   告诉java.net堆栈,将此属性设置为true,以使用   系统代理设置(这两个系统都允许您在全局设置代理   通过他们的用户界面)。请注意,仅检查此属性   一旦启动。

那应该引入系统代理设置......

有许多因素可以适用:

  1. 您的网络基础架构不允许您的程序直接连接到网络。许多位置使用代理设置来通过防火墙等。您是否拥有浏览器的代理?您可以将系统属性:java.net.useSystemProxies设置为true,并希望它将引入系统属性。
  2. 您的Windows个人防火墙通常会提示您让应用程序连接到网络。您是否拒绝/允许您的程序连接?
  3. 很多其他事情....
  4. 可以