当前位置: 首页 > 面试题库 >

在Java中,如何关闭连接并使用HttpURLConnection释放端口/套接字?

祁宾白
2023-03-14
问题内容

我正在使用HttpURLConnection来下载Java页面。我忘了释放连接,我认为这会导致我的系统(网络爬虫)出现一些问题。

现在,我已经进行了一些测试,看到断开连接后,netstatWindows上的命令结果中的某些连接仍然像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

编辑:

这来自HttpURLConnection
的J2SE文档
[已添加重点]:

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

这是来自Android文档:

为了减少延迟,此类可以为多个请求/响应对重用同一基础Socket。结果,HTTP连接的打开时间可能比必要的时间长。调用connect()将套接字返回到已连接套接字的池中。可以通过在发出任何HTTP请求之前将“
http.keepAlive”系统属性设置为“ false”来禁用此行为。“
http.maxConnections”属性可用于控制将保留与每个服务器建立多少空闲连接。

我不知道您使用的是哪个平台,但是它可能具有类似的行为。



 类似资料:
  • 我目前有一个简单的即时消息程序,它利用Java的Socket和ServerSocket类。它按预期运行,但当我尝试关闭连接时,它没有使用4路握手TCP断开来关闭连接。相反,它使用RST数据包突然关闭连接。 关闭连接的方法是从客户端向服务器发送一个字符串,服务器将把它识别为关闭连接的命令。然后,我在服务器上使用方法,在客户端上使用方法。 使用这些类正确关闭TCP连接的正确方式和/或事件顺序是什么?

  • 我将EclipseLink与JTA一起使用。当我使用WebLogic server版本(12.2.1.3.0)运行应用程序时,遇到了以下问题 PS-WebLogic版本(12.2.1.2.0)不面临此问题

  • 我使用来管理服务器端的套接字连接。如果服务器(tomcat)关闭,我如何确保任何活动的套接字连接被正确终止? 有好心的听众吗?或任何可以防止服务器关闭的拦截器,例如,如果在关闭期间有任何打开的套接字,则最多60秒;但同时关闭套接字,在关机期间不接受任何连接?

  • 我在netty server应用程序中面临资源问题。 无法看到与Netstat的任何打开或挂起的连接... 我使用ReadTimeoutHandler关闭未使用的连接,并使用以下exceptionHandler代码: 服务器引导程序如下所示: 更新2:根据请求,我将日志处理程序移到ReadTimeouthandler前面,以下是日志。客户端通常断开连接的情况: 客户端不断开连接的情况: 所以收盘前

  • 问题内容: 我遇到了Java套接字API的一些问题。我正在尝试显示当前连接到我的游戏的玩家数量。很容易确定播放器何时连接。但是,似乎似乎很难确定玩家何时使用套接字API断开连接。 呼叫已断开远程似乎总是返回一个插座上。同样,调用已远程关闭的套接字似乎总是会返回。我读过要真正确定套接字是否已关闭,必须将数据写入输出流,并且必须捕获异常。这似乎是处理这种情况的一种非常不干净的方法。我们只需要不断地通过

  • 我的MongoDB数据库具有快速增长的活动连接量。 我编写了一个代码来测试连接创建/关闭流程是如何工作的。这段代码总结了我如何在项目中使用库。 我发现了一件很奇怪的事,我不明白。根据我们创建新连接的方式(同步/异步),行为会有所不同。 如果我们同步创建连接-mongo在调用方法。 如果我们异步创建连接,mongo即使在调用方法。 > 是否有其他方法强制关闭连接插座? 它会在一段时间后自动关闭这些打