2011-03-08 3 views
0

나는 파일을 다운로드하기 위해 다음 코드를 작성했습니다.자바를 통해 다운로드 할 때 jvm_bind 문제가 발생했습니다

  java.io.BufferedInputStream in = 
      new java.io.BufferedInputStream(new java.net.URL(url).openStream()); 

     java.io.FileOutputStream fos = new java.io.FileOutputStream(filename); 

      java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024); 
        byte[] data = new byte[1024]; 
      int x=0; 
      while((x=in.read(data,0,1024))>=0) 
      { 

     bout.write(data,0,x); 
     } 
     if(filename.equalsIgnoreCase("table.csv")) 
     { 
     updateflag=true; 
     } 
     if(filename.equalsIgnoreCase("quotes.csv")) 
     { 
     quoteupdate=true; 
     } 
    bout.flush(); 
    bout.close(); 
     in.close(); 

"table.csv"라는 파일이 다운로드 기능의 매개 변수로 전달되면 모든 것이 원활하게 작동합니다. 문제는 "table.csv"를 다운로드 한 후 "quotes.csv"를 다운로드하려고 할 때입니다. 인식 할 수없는 윈도우 소켓 오류 :

   url="http://ichart.finance.yahoo.com/table.csv? s=%5EBSESN&a=00&b=31&c=2011&d="+(month-1)+"&e="+day+"&f="+year+"&g=d&ignore=.csv"; 
     updateflag=true; 

     downloadDB("table.csv",url); 


     System.out.print("quotes to download"); 

     url="http://download.finance.yahoo.com/d/quotes.csv? 
    s=%5EBSESN&f=sl1d1t1c1ohgv&e=.csv"; 
     if(candownload==true) 
     { 
     downloadDB("quotes.csv",url); 
     } 
     candownload=false; 

내가 말하는 오류가 발생합니다 :

정확한 호출이 0 :

JVM_BIND

지금은 JVM_BIND 내가 이미 포트 80에 부착 된 프로세스를 말하고 이해합니다. 그러나 기능이 끝나면 모든 스트림을 닫았습니다. 왜 이런 일이 일어 났습니까? 미리 감사드립니다.

+0

예, 재미있는 점은 오류가 표시된 후에 table.csv가 다운로드된다는 것입니다. 그러나 Quotes.csv는 다운로드되지 않습니다. – CyprUS

답변

1

의견을 게시 할 수있는 충분한 권한이 없으므로 정확한 문제가 해결되지 않을 수도 있습니다. 스트림을 열어 두어도 AFAIK 문제가 반드시 발생하는 것은 아닙니다. 실제로 새로운 서버 소켓이 이미 존재할 때 바인드를 시도하여 발생합니다. 그래서 ... 어쩌면 당신은 코드가 새로운 서버 소켓을 매번 (동일한 포트를 가지고) 바인딩하려고 시도 하는지를 체크해야한다. 다운로드 함수가 호출된다. 당신은 정말로 그렇게 할 필요가 없습니다. 한 번 바인드하고 accept 메소드에서 다운로드를 수행하는 새 스레드를 생성합니다.

+0

감사합니다. 나는 무엇이 잘못되었는지 알고 있다고 생각합니다. 함수가 호출 될 때마다 실제로 같은 포트에 바인딩되었습니다. 인터넷에 연결되어 있는지 확인하기 위해이 작업을 수행하고있었습니다. – CyprUS

관련 문제