0

プロキシサーバーを介して動作し、プロムバッファの内容を私のプログラムが読み取って、より多くの時間を考えます...それらを閉じるまで。サーバーからの応答がない場合に数秒から別のサーバーを取得するプログラムコードをどのように設定しますか?

URL url = new URL(linkCar);
String your_proxy_host = new String(proxys.getValueAt(xProxy, 1).toString());
int your_proxy_port = Integer.parseInt(proxys.getValueAt(xProxy, 2).toString());
Proxy proxy = null;
//  System.out.println(proxys.getValueAt(xProxy, 3).toString());
//  if (proxys.getValueAt(xProxy, 3).toString().indexOf("HTTP") > 0)
//  {
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(your_proxy_host, your_proxy_port));
//  } else {
//  proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(your_proxy_host, your_proxy_port));
//  }

HttpURLConnection connection = (HttpURLConnection)url.openConnection(proxy);
connection.setConnectTimeout(1000);
connection.connect();

String line = null;
StringBuffer buffer_page = new StringBuffer();
BufferedReader buffer_input = new BufferedReader(new InputStreamReader(connection.getInputStream(),"cp1251")); 
int cc = 0;

//this is thinking place!!!
while ((line = buffer_input.readLine()) != null && cc < 7000) {
   buffer_page.append(line);
   cc++;
}

doc = Jsoup.parse(String.valueOf(buffer_page));
connection.disconnect();

カウンターを使用しようとしましたが、機能しません...この状況を制御するために使用できる例外は何ですか?

4

1 に答える 1

1

を使用する必要がありますURLConnection.setReadTimeout。仕様から、

読み取りタイムアウトをミリ秒単位で指定されたタイムアウトに設定します。ゼロ以外の値は、リソースへの接続が確立されたときに入力ストリームから読み取るときのタイムアウトを指定します。読み取り可能なデータが存在する前にタイムアウトになると、java.net.SocketTimeoutException が発生します。ゼロのタイムアウトは、無限のタイムアウトとして解釈されます。

ご覧のとおり、タイムアウトがスローされる読み取りは、SocketTimeoutException適切にキャッチできます。

try (BufferedReader buffer_input = new BufferedReader(
         new InputStreamReader(connection.getInputStream(), "cp1251"))) {
  String line;
  while ((line = buffer_input.readLine()) != null) {
    buffer_page.append(line);
  }
} catch (SocketTimeoutException ex) {
  /* handle time-out */
}

上記のように使用する場合は注意する必要があることに注意してください。これにより、入力からreadLineすべてが削除されます。\r\n

于 2012-08-28T01:17:25.133 に答える