2016-10-07 24 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

相关问题