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 回答