2016-10-07 51 views
1

我們有一個使用我們的JNLP打開一個應用程序客戶。在這種的.jnlp,有喜歡的30個資源被下載(前。<jar href="https://url/to/resource.jar" download="lazy"/>)。我們可以注意到(通過netstat -ano)執行jnlp時會打開許多​​連接。

在我們的應用中,我們有一些代碼,下載一些文件,並在其執行過程中,當我們試圖調用HttpURLConnection#getInputStream()異常BindException: Address already in use被拋出。如果我們試圖再次打開JNLP,甚至沒有執行我們的應用程序,因爲同樣的異常被拋出(這時候就Java控制檯)。如果我們等待幾分鐘,檢查端口,我們可以看到,他們已經從netstat -ano消失了,然後我們再次嘗試用JNLP和錯誤打開再次出現在我們的應用程序。JNLP開連接過多,造成的BindException:地址已在使用

重要的是要說當用java -jar調用應用程序時,問題不會發生(因爲資源不需要下載並且沒有連接打開)。

這個問題發生在只有一個客戶,所以它必須是與他們的配置相關的東西。我們試圖添加MaxUserPort值爲65534和TcpTimedWaitDelay沒有成功。該客戶沒有使用防火牆,也沒有使用防病毒軟件,但他們表示,只要遷移到Windows終端服務器,問題就開始出現。他們的Java版本是8u101。

任何想法可能會影響我們的應用程序和解決方法?任何幫助表示讚賞。

代碼片段:

public InputStream connect(String urlToConnect) { 
    URL url = null; 
    InputStream is = null; 

    try { 
     url = new URL(urlToConnect);    
     HttpsURLConnection httpsConnection = (HttpsURLConnection) url.openConnection(); 
     is = httpsConnection.getInputStream(); 
    } catch (IOException e) { 
     URLConnector.logger.error("Could not open connection on URL: "+urlToConnect+" -> "+e); 
    } finally { 
     if(is != null) { 
      try { is.close(); } catch(IOException e){} 
     } 
    } 

    return is; 
} 
+0

問客戶:該IP地址是這個過程中嘗試使用Windows終端服務器時上綁定? –

回答

0

解決它編輯打開JNLP文件的註冊表:HKCR> JNLPFile>殼牌>打開>命令。取而代之的""C:\Program Files\Java\jre${VERSION}\bin\javaws.exe" "%1"",我使用了大約在Java持久連接""C:\Program Files\Java\jre${VERSION}\bin\javaws.exe" -J-Dhttp.keepAlive=false "%1""

更多信息,可以發現here

相關問題