在JAVA中可以有多个URL连接吗?

时间:2010-07-30 17:06:13

标签: java connection

我在使URL连接工作时遇到了一些麻烦。我发现,如果我创建一个URL对象,它工作正常。但是之后的一切都根本不起作用。起初我以为可能是因为我没有关闭流,但事实并非如此。

-1 =失败

 1 =成功

Testing:
        URLFail test0 = new URLFail();
        URLFail test1 = new URLFail(1);
        URLFail test2 = new URLFail(1,1);

OutPut:
    0Param  1
    1Param -1
    2Param -1

现在,如果我首先切换哪个对象,则结果会发生变化。

Testing:
        URLFail test2 = new URLFail(1,1);
        URLFail test0 = new URLFail();
        URLFail test1 = new URLFail(1);

OutPut:
      0Param -1
      1Param -1
      2Param  1

在这种情况下,只有test2成功。这让我相信每个类只能使用一个URL流吗?

这就是我用来访问和解析URL的原因。

        URL url = null;
        URLConnection urlConnection = null;
        try {
            url = new URL("xxxxx"); // In my program this is a proper URL

        } catch (MalformedURLException ex) {
            return -1;
        }

        ArrayList<String> index = new ArrayList<String>();

        try {
            urlConnection = url.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

            while (in.ready()) {
                index.add(in.readLine());
            }

            in.close();
        } catch (IOException ex) {
            return -1;

        }

到目前为止,我真的不知道什么是错的。我想这可能是因为我试图访问同一个网站的速度太快了?

我也通过使用URL中的openStream()方法尝试了没有URLConnection对象。任何帮助将不胜感激,也欢迎任何有关代码本身的一般评论。谢谢!

这是整个代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

public class URLFail {
    private int name;

    public static void main(String[] args) {

        URLFail test0 = null;
        URLFail test1 = null;
        URLFail test2 = null;

        try {
            test0 = new URLFail();
            System.out.println("First Complete...");
            Thread.sleep(1000);
            test2 = new URLFail();
            System.out.println("Second Complete...");
            Thread.sleep(1000);
            test1 = new URLFail();
            System.out.println("Third Complete...");
        } catch (InterruptedException e) {
            // TODO: handle exception
        }

        System.out.println();
        System.out.println("0Param " + test0.name);
        System.out.println("1Param " + test1.name);
        System.out.println("2Param " + test2.name);

    }

    public URLFail() {
        name = getAsList();
    }

    public int getAsList() {

        URL url = null;
        URLConnection urlConnection = null;
        try {
            url = new URL("xxxxx");
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
            return -1;
        }

        ArrayList<String> index = new ArrayList<String>();

        try {
            urlConnection = url.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    urlConnection.getInputStream()));

            while (in.ready()) {
                index.add(in.readLine());
            }

            in.close();
        } catch (IOException ex) {
            ex.printStackTrace();
            return -1;
        }

        if (index.isEmpty()) {
            return -1;
        } else {
            return 1;
        }

    }

}

我尝试使用google.com,但它运行正常,所以它必须是我正在尝试连接的主机。有没有办法关闭URL连接/断开连接?

2 个答案:

答案 0 :(得分:3)

在每个“return -1”前插入一个

ex.printStackTrace();

这很可能会告诉你你需要知道什么。

答案 1 :(得分:2)

那么在连续三次运行它时,您的“问题”服务器上的行为与完整的示例代码有什么关系?如果你运行几次它会产生相同的结果吗?

可能是那个

in.ready()

在第一次在循环中检查时返回false,因为你的目标服务器根本没有足够快地发送响应?