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

在JAVA中是否可以有多个URL连接?,java,connection,Java,Connection,我在使URL连接正常工作时遇到一些问题。我发现,如果我创建一个URL对象,它就可以正常工作。但那之后的一切都不起作用。起初我以为这可能是因为我没有关闭一条小溪,但事实并非如此 -1=失败 1=成功 Testing: URLFail test0 = new URLFail(); URLFail test1 = new URLFail(1); URLFail test2 = new URLFail(1,1); OutPut: 0Param

我在使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=null;
URLConnection URLConnection=null;
试一试{
url=新url(“xxxxx”);//在我的程序中,这是一个正确的url
}捕获(格式错误){
返回-1;
}
ArrayList索引=新的ArrayList();
试一试{
urlConnection=url.openConnection();
BufferedReader in=新的BufferedReader(新的InputStreamReader(urlConnection.getInputStream());
while(在.ready()中){
index.add(in.readLine());
}
in.close();
}捕获(IOEX异常){
返回-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;
        }

    }

}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.net.URLConnection;
导入java.util.ArrayList;
公共类URLFail{
私有整数名;
公共静态void main(字符串[]args){
URLFail test0=null;
urlfailtest1=null;
URLFail test2=null;
试一试{
test0=新的URLFail();
System.out.println(“第一次完成…”);
睡眠(1000);
test2=新的URLFail();
System.out.println(“第二次完成…”);
睡眠(1000);
test1=新的URLFail();
System.out.println(“第三次完成…”);
}捕捉(中断异常e){
//TODO:处理异常
}
System.out.println();
System.out.println(“0Param”+test0.name);
System.out.println(“1参数”+test1.name);
System.out.println(“2Param”+test2.name);
}
公共URL失败(){
name=getAsList();
}
public int getAsList(){
URL=null;
URLConnection URLConnection=null;
试一试{
url=新url(“xxxxx”);
}捕获(格式错误){
例如printStackTrace();
返回-1;
}
ArrayList索引=新的ArrayList();
试一试{
urlConnection=url.openConnection();
BufferedReader in=新的BufferedReader(新的InputStreamReader(
urlConnection.getInputStream());
while(在.ready()中){
index.add(in.readLine());
}
in.close();
}捕获(IOEX异常){
例如printStackTrace();
返回-1;
}
if(index.isEmpty()){
返回-1;
}否则{
返回1;
}
}
}
我在google.com上试过这个,效果很好,所以它一定是我要连接的主机。有没有办法关闭URL连接/断开连接?

在每个“返回-1”前面插入一个

ex.printStackTrace();
这很可能会告诉您需要知道的内容。

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

ex.printStackTrace();

这很可能会告诉您需要知道的内容。

那么,当您连续三次运行“问题”服务器时,您在完整示例代码的“问题”服务器上的行为是什么?如果运行几次,是否总是产生相同的结果

会是这样吗

in.ready()

第一次在循环中检查时简单地返回false,因为您的目标服务器发送响应的速度不够快?

那么,当连续三次运行完整的示例代码时,您在“问题”服务器上的行为如何?如果运行几次,是否总是产生相同的结果

会是这样吗

in.ready()

第一次在循环中检查时简单地返回false,因为您的目标服务器发送响应的速度不够快?

它们是http连接吗?它们是否连接到同一台服务器?构造函数参数表示什么?它们是如何使用的。尝试发布URLFail的整个代码。这是一个http连接。而构造器实际上毫无意义,我不知道我在想什么。整个代码现在都发布了。服务器端可能不允许同时多个http连接到同一个URL。我想这正是发生的事情。但是如何断开连接?它们是http连接吗?它们是否连接到同一台服务器?构造函数参数表示什么?它们是如何使用的。尝试发布URLFail的整个代码。这是一个http连接。而构造器实际上毫无意义,我不知道我在想什么。整个代码现在都发布了。服务器端可能不允许同时多个http连接到同一个URL。我想这正是发生的事情。但如何断开连接?这些错误不会被调用。-1来自我没有包含的另一段代码。基本上,产生这个错误是因为新的ArrayList是空的,这意味着当我打开一个URL流时,它里面什么都没有。您是否考虑过使用不同的错误代码,以便它们告诉您一些有用的信息?@Uri然后使用
ex.printStackTrace()
运行它?它会告诉你更多关于到底出了什么问题,而不是