url.openStream() bug??

Hello everybody,
I wrote a program that needs a connection to the internet to download some files in order to work properly.  The program periodically attempts to download the files opening a stream to the server using url.openStream(), if an exception occur, the program waits a period of time and then attempts again the connection.

I don't understand why it is behaving different depending on whether the dial-up connection is stablished or not.  If the connection is stablished before the program runs, everithing goes right, but if the program runs before the connection is stablished(at least 1 failed attempt was made for downloading the files) the url.openStream() always thows an exception no matters if the connection is available later on.

It seems to be like it "remembers" that the connection was unavailable and the next time it tries to download the files a real attempt is not made.
Maybe something is happening with the ip address, because it is assigned dinamically by the ISP and in the first case the ip address exists but in the second not until the connection is stablished.

Please, i need a solution as soon as possible.
Tanks,
Diego Broos V.
dbroosAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Sasha_MapaConnect With a Mentor Commented:
This is a known bug which has been fixed in Merlin (JDK 1.4) - http://developer.java.sun.com/developer/bugParade/bugs/4204351.html

The bug is that InetAddress.getByName() caches not only positive results (host found) but also negative results (host not found).

Sasha Maryanovsky.
0
 
elronCommented:
Could you post the snippet of code which does this?  I think perhaps you are creating/calling the method in an inappropriate place and it's not getting reinitialized somehow...

(BTW, the word is established, not stablished.  I know many people on here have English as a second language, so no disrespect is meant in the correction...)

Regards,
   elron
0
 
dbroosAuthor Commented:
ok and thanks for the correction...

Here is the code:

public class CheckFile implements Runnable {
    ...
    public void run() {
        ...
        while (!stop) {
            try {
                getData();
                Thread.sleep(WAIT);
            } catch (Exception e){
                try {
                    Thread.sleep(WAIT_ERROR);
                } catch(Exception ex) {}
            }
        }
    }

    ...

    private void getData() throws Exception {
        BufferedInputStream bis = null;
        URL url = null;

        try {
            url = new URL(strurl);
            bis = new BufferedInputStream(url.openStream());
            bis.read(arr, 0, arr.length);
        } catch(Exception e) {
            throw e;
        } finally {
            if(bis != null)
                try {
                    bis.close();
                } catch(Exception e) {}
        }
    }
}
0
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
elronCommented:
A suggestion is to either step through in debug or put in some output statements to see if you are hitting the exception on the "try" or the "finally" in your getData() method.  I suspect it has something to do with the bis.close() in the already connected instance, and the url.openStream() in the not connected instance.

See where the exception is being throws in each instance and we'll work from there...

Regards,
    elron
0
 
rajesh_balaCommented:
listening
0
 
Sasha_MapaCommented:
Btw, it might work if you specify your server(s) by IP and not by hostname.

P.S. Thanks for the points.

Sasha Maryanovsky.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.