我们有一个使用我们的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终端服务器时上绑定? –