Solved

url.openStream() bug??

Posted on 2001-07-24
6
245 Views
Last Modified: 2011-10-03
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.
0
Comment
Question by:dbroos
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
6 Comments
 
LVL 1

Expert Comment

by:elron
ID: 6313594
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
 

Author Comment

by:dbroos
ID: 6315665
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
 
LVL 1

Expert Comment

by:elron
ID: 6315745
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
Revamp Your Training Process

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action.

 
LVL 10

Expert Comment

by:rajesh_bala
ID: 6315923
listening
0
 
LVL 7

Accepted Solution

by:
Sasha_Mapa earned 70 total points
ID: 6316363
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
 
LVL 7

Expert Comment

by:Sasha_Mapa
ID: 6320690
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

Featured Post

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
Suggested Courses

628 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question