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

时间:2011-05-29 03:22:21

标签: 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;
    }
}

2 个答案:

答案 0 :(得分:4)

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

编辑:

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

  

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

这来自Android docs

  

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

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

答案 1 :(得分:0)

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