2011-03-08 60 views
0

我寫下面的代碼來下載文件。通過java下載時出現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; 

我得到錯誤說:無法識別的Windows套接字錯誤:0:JVM_BIND

現在我明白了JVM_BIND是說我已經連接到端口80的過程。 但是,我在我的函數結束時關閉了所有流。那爲什麼會發生呢? 在此先感謝

+0

是的,有趣的是錯誤後顯示,table.csv被下載。 Quotes.csv然而不下載。 – CyprUS 2011-03-08 16:16:49

回答

1

我沒有足夠的權限發表評論,所以我很抱歉提供一個答案,可能無法解決確切的問題。 將流打開並不一定會導致此問題AFAIK。這實際上是由於嘗試綁定一個新的服務器套接字時已經存在的。所以...也許你應該檢查你的代碼是否試圖每次(使用相同的端口)綁定一個新的ServerSocket時調用下載函數。你真的不需要那樣做。綁定一次,然後在accept方法中產生一個新的線程來完成下載。

+0

謝謝..我想我知道什麼是錯的。每次調用函數時,我確實都會綁定到同一個端口,我正在檢查互聯網是否連接。 – CyprUS 2011-03-08 17:17:55