Java教程示例代码抛出:java.net.SocketException:连接重置 - 导致它的原因是什么?

时间:2013-06-05 14:25:41

标签: java exception

所以这是初学者的问题

执行working with urls章节中的示例代码时,它会抛出:

线程“main”中的异常 java.net.SocketException:连接重置     在java.net.SocketInputStream.read(SocketInputStream.java:189)......

Origin是 openStream()方法。

以下是代码:

    import java.net.*;
    import java.io.*;

    public class URLReader {

       public static void main(String[] args) throws Exception {

          URL oracle = new URL("http://www.oracle.com/");
          BufferedReader in = new BufferedReader(
          new InputStreamReader(oracle.openStream()));

          String inputLine;
          while ((inputLine = in.readLine()) != null) {
             System.out.println(inputLine);
          }
          in.close();
       }
    }

我知道有关于该主题的类似线索,但我找不到适合我的答案。

到目前为止我尝试了什么

  • 我按照建议设置了代理主机 here。命令是: java -Dhttp.proxyHost = dslb-088-071-100-199.pools.arcor-ip.net ,我也尝试插入 System.setProperty(“http。 proxyHost“,”dslb-088-071-100-199.pools.arcor-ip.net“); 在URLReader类的第一行。
  • 我尝试了JSoup html解析器和
  • org.apache.commons.io.FileUtils.copyURLToFile(URL,File)方法有类似的结果。

无论我尝试什么,我总会得到同样的错误:30秒左右不会发生任何事情,然后抛出提到的SocketException。

我根本不知道如何继续解决这个问题。有用的是获取有关连接重置前30秒内背景中发生的事情的信息。

那么实际上可能导致此异常的原因是什么?

最小的提示可能会有所帮助!谢谢!

2 个答案:

答案 0 :(得分:2)

您的代码适用于可以连接到互联网的JVM。

基于原始问题和讨论:http://chat.stackoverflow.com/rooms/31264/discussion-between-achingfingers-and-meewok似乎要么:

  • 中间防火墙阻止JVM建立连接(或其他类似的网络问题)。
  • 导致问题的操作系统防火墙防病毒

我的建议是尝试:

  • 在同一网络内的不同计算机上使用相同的应用程序(以查看它是否特定于PC)。
  • 不同网络上的相同应用。

答案 1 :(得分:0)

尝试Apache HTTPClient。我希望所有的导入都包含在内,因为这段代码没有经过测试......而且你的30s是你客户的连接超时。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URI;

import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;


public class URLReader {

   public static void main(String[] args) throws Exception {
        HttpClient httpclient = new DefaultHttpClient();
        httpclient.getParams().setParameter(
                CoreConnectionPNames.CONNECTION_TIMEOUT, timeOut);
        httpclient.getParams().setParameter(
                CoreConnectionPNames.SO_TIMEOUT, 2 * timeOut);
        httpclient.getParams().setParameter(
                CoreConnectionPNames.STALE_CONNECTION_CHECK, false);
        httpclient.getParams().setParameter(
                CoreConnectionPNames.TCP_NODELAY, true);
        HttpHost proxy = new HttpHost(%proxyhost%, %proxyport%);
        HttpGet httpget = new HttpGet("http://www.oracle.com");
        HttpResponse resp = httpclient.execute(httpget);
        respCode = resp.getStatusLine().getStatusCode();

        BufferedReader br = new BufferedReader(new InputStreamReader(resp
                .getEntity().getContent()));
        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }
}