我們有一個使用我們的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;
}
問客戶:該IP地址是這個過程中嘗試使用Windows終端服務器時上綁定? –