在Java中,有多接近连接并使用HttpURLConnection释放端口/套接字?

我正在使用HttpURLConnection来下载Java中的页面。 我忘了释放连接,我认为这给我的系统(网络浏览器)带来了一些问题。

现在我已经做了一些测试,看到在断开连接之后,一些连接仍然像Windows上netstat命令的结果中的TIME_WAIT。

我如何立即释放此连接?

示例代码:

 private HttpURLConnection connection; boolean openConnection(String url) { try { URL urlDownload = new URL(url); connection = (HttpURLConnection) urlDownload.openConnection(); connection.setInstanceFollowRedirects(true); connection.connect(); connection.disconnect(); return true; } catch (Exception e) { System.out.println(e); return false; } } 

在某些实现中,如果已调用getInputStreamgetOutputStream ,则需要确保关闭这些流。 否则,即使在disconnect后,连接也可以保持打开disconnect

编辑:

这是来自J2SE docs for HttpURLConnection [强调添加]:

如果此时持久连接处于空闲状态,则调用disconnect()方法可能会关闭底层套接字。

这是来自Android文档 :

为了减少延迟,该类可以为多个请求/响应对重用相同的底层Socket。 因此,HTTP连接可能会保持打开的时间超过必要的时间。 调用disconnect()将套接字返回到已连接套接字池。 在发出任何HTTP请求之前,可以通过将“http.keepAlive”系统属性设置为“false”来禁用此行为。 “http.maxConnections”属性可用于控制将保留到每个服务器的空闲连接数。

我不知道你正在使用什么平台,但它可能有类似的行为。

TME_WAIT状态由TCP强加,而不是由Java强加。 它持续两分钟。 这个是正常的。