0

これが私が使用しているコードです

    URLConnection connection = null;
    InputStream inputStream = null;
    Scanner scanner = null;

    try {
        connection = new URL("http://www.aol.com").openConnection();
        inputStream = connection.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

    scanner = new Scanner(inputStream);

    System.out.println(connection.getReadTimeout());

    while(scanner.hasNextLine())
    {
        System.out.println(scanner.nextLine());
    }

タイムアウトが 0 に設定されているようですが、このコードを実行する場所によっては、常に同じ場所で停止します。ただし、各場所は常に同じ場所で読み取りを停止します。デバッガーを実行しましたが、終了した後、scanner.next() が返されません。このコードのさまざまな場所がさまざまな時点で停止するため、これが入力の一部ではないことはわかっています。実行時間に関係があると思います。

助けてください :-(

4

3 に答える 3

0

(少し簡略化した) コードを実行したところ、HTML ページ全体が返されました。

final URLConnection connection = new URL("http://www.aol.com").openConnection();
System.out.println(connection.getReadTimeout());
final Scanner scanner = new Scanner(connection.getInputStream());
while(scanner.hasNextLine()) System.out.println(scanner.nextLine());
scanner.close();

出力:

0
<html
   ... many tons of html ...
</html>
于 2012-07-29T11:03:16.250 に答える
0

ここのコードに問題はありません。ネットワーク接続を確認する必要があります。プロキシが非常に応答しない可能性があります。使用してみてください:

new URL("http://www.aol.com").openConnection(Proxy.NO_PROXY);  
于 2012-07-29T11:08:21.417 に答える
-1

標準の Java SE クラスから HTTP データに直接アクセスすることは、低レベルであることを考慮してください。Apache HTTP クライアントライブラリは、多くのニュアンスを処理します。これは通常、質問のようなコードで示されます。構成の問題が発生した場合、これは実際には透過的に対処する可能性があります。それが役立つかどうか試してみてください:

HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
HttpMethod method = new GetMethod("http://www.aol.com");
method.setFollowRedirects(true);
client.executeMethod(method);
String responseBody = method.getResponseBodyAsString();
method.releaseConnection();

それ以外の場合は、コードが問題ないように見えるため、他の解決策が構成の問題を正確に絞り込むのに役立つ場合があります。

于 2012-07-29T11:08:44.857 に答える