6

これは初心者の質問です。

URLの操作の章のサンプル コードを実行すると、次のメッセージがスローされます。

スレッド「メイン」での例外java.net.SocketException: java.net.SocketInputStream.read(SocketInputStream.java:189) で接続がリセットされました ...

オリジンは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();
       }
    }

そのトピックに関して同様のスレッドがあることは知っていますが、私に合った答えが見つかりませんでした.

私がこれまでに試したこと

  • ここで提案されているようにプロキシホストを設定し ました。コマンドは: 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 秒前にバックグラウンドで何が起こっているかについての情報を取得すると便利です。

では、実際にこの例外が発生する原因は何でしょうか?

ちょっとしたヒントが役に立ちます!ありがとうございました!

4

2 に答える 2

-1

Apache HTTPClientを試してください。このコードはそのままではテストされていないため、すべてのインポートが含まれていることを願っています...また、30秒はクライアントの接続タイムアウトです。

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();
    }
}
于 2013-06-05T14:57:00.523 に答える