在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; } }
在某些实现中,如果已调用getInputStream
或getOutputStream
,则需要确保关闭这些流。 否则,即使在disconnect
后,连接也可以保持打开disconnect
。
编辑:
这是来自J2SE docs for HttpURLConnection [强调添加]:
如果此时持久连接处于空闲状态,则调用disconnect()方法可能会关闭底层套接字。
这是来自Android文档 :
为了减少延迟,该类可以为多个请求/响应对重用相同的底层Socket。 因此,HTTP连接可能会保持打开的时间超过必要的时间。 调用disconnect()将套接字返回到已连接套接字池。 在发出任何HTTP请求之前,可以通过将“http.keepAlive”系统属性设置为“false”来禁用此行为。 “http.maxConnections”属性可用于控制将保留到每个服务器的空闲连接数。
我不知道你正在使用什么平台,但它可能有类似的行为。
TME_WAIT状态由TCP强加,而不是由Java强加。 它持续两分钟。 这个是正常的。