Можно ли иметь несколько URL-соединений в JAVA? - PullRequest
0 голосов
/ 30 июля 2010

У меня возникли проблемы с установкой 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;

        }

Пока я действительно не знаю, что случилось. Я думаю, это может быть связано с тем, что я пытаюсь зайти на тот же сайт слишком быстро?

Я также пытался без объекта URLConnection с помощью метода openStream (), найденного в URL. Будем благодарны за любую помощь, также приветствуются любые общие комментарии о самом коде. Спасибо!

Это весь код:

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 ]

3 голосов
/ 30 июля 2010

Перед каждым "возврат -1" вставьте

ex.printStackTrace();

Это, скорее всего, скажет вам, что вам нужно знать.

2 голосов
/ 31 июля 2010

Итак, как вы себя чувствуете на своем «проблемном» сервере с полным примером кода при запуске его три раза подряд?Всегда ли он дает один и тот же результат, если вы запускаете его пару раз?

Может ли быть так, что

in.ready()

просто возвращает false при первой проверке в цикле, потому что ваша цельсервер просто не отправляет ответ достаточно быстро?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...